实例 6

题目

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

分析

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

实现

  1. import java.util.Scanner;
  2. /**
  3. * Created with IntelliJ IDEA.
  4. *
  5. * @author : cunyu
  6. * @version : 1.0
  7. * @email : 747731461@qq.com
  8. * @公众号 : 村雨遥
  9. * @website : https://cunyu1943.github.io
  10. * @date : 2021/6/1 22:23
  11. * @project : Java 编程实例
  12. * @package : PACKAGE_NAME
  13. * @className : Example6
  14. * @description :
  15. */
  16. public class Example6 {
  17. public static void main(String[] args) {
  18. Scanner scanner = new Scanner(System.in);
  19. System.out.println("输入 m, n");
  20. int m = scanner.nextInt();
  21. int n = scanner.nextInt();
  22. int divisor = maxCommonDivisor(m, n);
  23. int multiple = m * n / maxCommonDivisor(m, n);
  24. System.out.println("最大公约数: " + divisor);
  25. System.out.println("最小公倍数: " + multiple);
  26. }
  27. public static int maxCommonDivisor(int a, int b) {
  28. int max, min;
  29. max = (a > b) ? a : b;
  30. min = (a < b) ? a : b;
  31. if (max % min != 0) {
  32. return maxCommonDivisor(min, max % min);
  33. } else {
  34. return min;
  35. }
  36. }
  37. }

结果

那些年,我们一起做过的 Java 课后练习题(6 - 10) - 图1

实例 7

题目

输入一行字符,分别统计其中的英文字母、空格、数字和其他字符的个数;

分析

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

实现

  1. import java.util.Scanner;
  2. /**
  3. * Created with IntelliJ IDEA.
  4. *
  5. * @author : cunyu
  6. * @version : 1.0
  7. * @email : 747731461@qq.com
  8. * @公众号 : 村雨遥
  9. * @website : https://cunyu1943.github.io
  10. * @date : 2021/6/1 23:04
  11. * @project : Java 编程实例
  12. * @package : PACKAGE_NAME
  13. * @className : Example7
  14. * @description :
  15. */
  16. public class Example7 {
  17. public static void main(String[] args) {
  18. Scanner scanner = new Scanner(System.in);
  19. System.out.println("输入字符串");
  20. String str = scanner.nextLine();
  21. int character = 0;
  22. int digit = 0;
  23. int blank = 0;
  24. int others = 0;
  25. // 遍历字符串,然后统计其中的字符
  26. for (int i = 0; i < str.length(); i++) {
  27. char ch = str.charAt(i);
  28. if (ch == ' ') {
  29. blank++;
  30. } else if (ch >= '0' && ch <= '9') {
  31. digit++;
  32. } else if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') {
  33. character++;
  34. } else {
  35. others++;
  36. }
  37. }
  38. System.out.println("空格数:" + blank);
  39. System.out.println("英文字母数:" + character);
  40. System.out.println("数字数:" + digit);
  41. System.out.println("其他字符数:" + others);
  42. }
  43. }

结果

那些年,我们一起做过的 Java 课后练习题(6 - 10) - 图2

实例 8

题目

那些年,我们一起做过的 Java 课后练习题(6 - 10) - 图3 的值,其中 那些年,我们一起做过的 Java 课后练习题(6 - 10) - 图4 是一个数字,如 2 + 22 + 222 + … + 22…2

分析

首先是分别输入 那些年,我们一起做过的 Java 课后练习题(6 - 10) - 图5 和次数 count 的值,然后循环得到最大的数,每次进行累加求和,然后向前移动一位。

实现

  1. import java.util.Scanner;
  2. /**
  3. * Created with IntelliJ IDEA.
  4. *
  5. * @author : cunyu
  6. * @version : 1.0
  7. * @email : 747731461@qq.com
  8. * @公众号 : 村雨遥
  9. * @website : https://cunyu1943.github.io
  10. * @date : 2021/6/2 16:25
  11. * @project : Java 编程实例
  12. * @package : PACKAGE_NAME
  13. * @className : Example8
  14. * @description :
  15. */
  16. public class Example8 {
  17. public static void main(String[] args) {
  18. Scanner scanner = new Scanner(System.in);
  19. System.out.println("输入次数");
  20. int count = scanner.nextInt();
  21. System.out.println("输入 a");
  22. int a = scanner.nextInt();
  23. int sum = 0;
  24. int i = 0;
  25. // 缓存尾数
  26. int tmp = 0;
  27. while (i < count) {
  28. tmp += a;
  29. sum += tmp;
  30. a *= 10;
  31. i++;
  32. }
  33. System.out.println("最终和:" + sum);
  34. }
  35. }

结果

那些年,我们一起做过的 Java 课后练习题(6 - 10) - 图6

实例 9

题目

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

分析

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

实现

  1. /**
  2. * Created with IntelliJ IDEA.
  3. *
  4. * @author : cunyu
  5. * @version : 1.0
  6. * @email : 747731461@qq.com
  7. * @公众号 : 村雨遥
  8. * @website : https://cunyu1943.github.io
  9. * @date : 2021/6/2 16:36
  10. * @project : Java 编程实例
  11. * @package : PACKAGE_NAME
  12. * @className : Example9
  13. * @description :
  14. */
  15. public class Example9 {
  16. public static void main(String[] args) {
  17. System.out.println("1000 以内的完数:");
  18. int count = 0;
  19. for (int i = 1; i <= 1000; i++) {
  20. if (check(i)) {
  21. count++;
  22. System.out.print(i + "\t");
  23. }
  24. }
  25. System.out.println("\n1000 以内的完数个数:" + count);
  26. }
  27. /**
  28. * 判断一个数是否为完数
  29. *
  30. * @param num
  31. * @return true 完数;false 非完数
  32. */
  33. public static boolean check(int num) {
  34. int sum = 0;
  35. // 求 num 的各个因子并求和
  36. for (int i = 1; i < num; i++) {
  37. if (num % i == 0) {
  38. sum += i;
  39. }
  40. }
  41. // 判断各个因子之和是否等于该数
  42. if (sum == num) {
  43. return true;
  44. }
  45. return false;
  46. }
  47. }

结果

那些年,我们一起做过的 Java 课后练习题(6 - 10) - 图7

实例 10

题目

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

分析

第一次下落的路程和下落高度均为 100 m,然后循环后续 9 次,每次下落的高度是上一次下落高度的一般,而经过的路程则为之前经过的路程之和加上本次下落的高度。

实现

  1. /**
  2. * Created with IntelliJ IDEA.
  3. *
  4. * @author : cunyu
  5. * @version : 1.0
  6. * @email : 747731461@qq.com
  7. * @公众号 : 村雨遥
  8. * @website : https://cunyu1943.github.io
  9. * @date : 2021/6/2 16:46
  10. * @project : Java 编程实例
  11. * @package : PACKAGE_NAME
  12. * @className : Example10
  13. * @description :
  14. */
  15. public class Example10 {
  16. public static void main(String[] args) {
  17. double height = 100.0d;
  18. double sum = 100.0d;
  19. for (int i = 1; i < 10; i++) {
  20. // 经过的路程等于之前路程加上当前次下落高度
  21. sum += height;
  22. // 当前次下落高度为上一次的一半
  23. height /= 2;
  24. }
  25. System.out.println("第 10 次反弹高度:" + height / 2);
  26. System.out.println("10 次共经过路程:" + sum);
  27. }
  28. }

结果

那些年,我们一起做过的 Java 课后练习题(6 - 10) - 图8