本文已同步至:村雨遥

实例 6

题目

输出两个正整数 m 和 n,求其最大公约数和最小公倍数。

剖析

在循环中,只有除数不等于 0,用较大数除以较小的数,将较小的一个数作为下一轮循环的大数,获得的余数作为下一轮循环的较小的数,如此循环晓得较小的数的值为 0,返回较大的数,此数极为最大公约数,最小公倍数为两数之积除以最大公约数。

实现

import java.util.Scanner;/** * Created with IntelliJ IDEA. * * @author : cunyu * @version : 1.0 * @email : 747731461@qq.com * @公众号 : 村雨遥 * @website : https://cunyu1943.github.io * @date : 2021/6/1 22:23 * @project : Java 编程实例 * @package : PACKAGE_NAME * @className : Example6 * @description : */public class Example6 {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        System.out.println("输出 m, n");        int m = scanner.nextInt();        int n = scanner.nextInt();        int divisor = maxCommonDivisor(m, n);        int multiple = m * n / maxCommonDivisor(m, n);        System.out.println("最大公约数: " + divisor);        System.out.println("最小公倍数: " + multiple);    }    public static int maxCommonDivisor(int a, int b) {        int max, min;        max = (a > b) ? a : b;        min = (a < b) ? a : b;        if (max % min != 0) {            return maxCommonDivisor(min, max % min);        } else {            return min;        }    }}

后果

实例 7

题目

输出一行字符,别离统计其中的英文字母、空格、数字和其余字符的个数;

剖析

遍历字符串,而后看每个字符属于的类别,别离计数;

实现

import java.util.Scanner;/** * Created with IntelliJ IDEA. * * @author : cunyu * @version : 1.0 * @email : 747731461@qq.com * @公众号 : 村雨遥 * @website : https://cunyu1943.github.io * @date : 2021/6/1 23:04 * @project : Java 编程实例 * @package : PACKAGE_NAME * @className : Example7 * @description : */public class Example7 {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        System.out.println("输出字符串");        String str = scanner.nextLine();        int character = 0;        int digit = 0;        int blank = 0;        int others = 0;//        遍历字符串,而后统计其中的字符        for (int i = 0; i < str.length(); i++) {            char ch = str.charAt(i);            if (ch == ' ') {                blank++;            } else if (ch >= '0' && ch <= '9') {                digit++;            } else if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') {                character++;            } else {                others++;            }        }        System.out.println("空格数:" + blank);        System.out.println("英文字母数:" + character);        System.out.println("数字数:" + digit);        System.out.println("其余字符数:" + others);    }}

后果

实例 8

题目

求 $s = a + aa + aaa + … + aa…a$ 的值,其中 $a$ 是一个数字,如 2 + 22 + 222 + … + 22…2

剖析

首先是别离输出 $a$ 和次数 count 的值,而后循环失去最大的数,每次进行累加求和,而后向前挪动一位。

实现

import java.util.Scanner;/** * Created with IntelliJ IDEA. * * @author : cunyu * @version : 1.0 * @email : 747731461@qq.com * @公众号 : 村雨遥 * @website : https://cunyu1943.github.io * @date : 2021/6/2 16:25 * @project : Java 编程实例 * @package : PACKAGE_NAME * @className : Example8 * @description : */public class Example8 {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        System.out.println("输出次数");        int count = scanner.nextInt();        System.out.println("输出 a");        int a = scanner.nextInt();        int sum = 0;        int i = 0;        // 缓存尾数        int tmp = 0;        while (i < count) {            tmp += a;            sum += tmp;            a *= 10;            i++;        }        System.out.println("最终和:" + sum);    }}

后果

实例 9

题目

一个数如果恰好等于它的因子之和,那么这个数就叫做 “完数”,如 6 = 1 + 2 + 3,编程找出 1000 之内的所有完数。

剖析

求 num 的各个因子,而后用一个变量 sum 来计算一个数 num 的因子之和,最初判断 sum 和 num 是否相等,若相等则阐明该数是一个完数,若不相等则阐明不是。

实现

/** * Created with IntelliJ IDEA. * * @author : cunyu * @version : 1.0 * @email : 747731461@qq.com * @公众号 : 村雨遥 * @website : https://cunyu1943.github.io * @date : 2021/6/2 16:36 * @project : Java 编程实例 * @package : PACKAGE_NAME * @className : Example9 * @description : */public class Example9 {    public static void main(String[] args) {        System.out.println("1000 以内的完数:");        int count = 0;        for (int i = 1; i <= 1000; i++) {            if (check(i)) {                count++;                System.out.print(i + "\t");            }        }        System.out.println("\n1000 以内的完数个数:" + count);    }    /**     * 判断一个数是否为完数     *     * @param num     * @return true 完数;false 非完数     */    public static boolean check(int num) {        int sum = 0;//        求 num 的各个因子并求和        for (int i = 1; i < num; i++) {            if (num % i == 0) {                sum += i;            }        }//        判断各个因子之和是否等于该数        if (sum == num) {            return true;        }        return false;    }}

后果

实例 10

题目

一球从 100 米高度自在落下,每次落地后反弹原高度的一半,再落下,求它在第 10 次落地时共通过多少米?第 10 次反弹的高度是多少?

剖析

第一次着落的途程和着落高度均为 100 m,而后循环后续 9 次,每次着落的高度是上一次着落高度的个别,而通过的途程则为之前通过的途程之和加上本次着落的高度。

实现

/** * Created with IntelliJ IDEA. * * @author : cunyu * @version : 1.0 * @email : 747731461@qq.com * @公众号 : 村雨遥 * @website : https://cunyu1943.github.io * @date : 2021/6/2 16:46 * @project : Java 编程实例 * @package : PACKAGE_NAME * @className : Example10 * @description : */public class Example10 {    public static void main(String[] args) {        double height = 100.0d;        double sum = 100.0d;        for (int i = 1; i < 10; i++) {//            通过的途程等于之前途程加上以后次着落高度            sum += height;//            以后次着落高度为上一次的一半            height /= 2;        }        System.out.println("第 10 次反弹高度:" + height / 2);        System.out.println("10 次共通过途程:" + sum);    }}

后果