实例 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 + a a + a a a + … + a a … a s = a + aa + aaa + … + aa…as=a+aa+aaa+…+aa…a 的值,其中 a aa 是一个数字,如 2 + 22 + 222 + … + 22…2
分析
首先是分别输入 a aa 和次数 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); } }