• Java编程练习题Demo33-Demo40


    目录

    Demo33. 如何编写程序来求最大公约数呢?

    Demo34. 如何将一个十进制数转换为十六进制数呢?

    Demo35. 编写一个程序,提示用户输人一个字符串,然后给出该字符串是否是回文

    Demo36. 质数输出,在5行中显示前50个素数,每行包含10个数

    Demo37. 统计正数和负数的个数然后计算这些数的平均值

    Demo38. (找出能被5和6整除的数)编写程序,显示从100到1000之间所有能被5和6整除的数,每行显示10个。数字之间用一个空格字符隔开。

    Demo39. (找出能被5或6整除,但不能被两者同时整除的数)编写程序,显示从100到200之间所有能被5或6整除,但不能被两者同时整除的数,每行显示10个数。数字之间用一个空格字符隔开。

    Demo40. (找出一个整数的因子)编写程序,读入一个整数,然后以升序显示它的所有最小因子。例如,若输入的整数是120,那么输出就应该是:2,2,2,3,5。


    Demo33. 如何编写程序来求最大公约数呢?

           两个整数4和2的最大公约数是2。两个整数16和24的最大公约数是8。是否立刻就开始编写代码?不对。在编写代码之前进行思考是非常重要的。思考让你可以在考虑如何编写代码前,生成解决问题的逻辑方案。设输入的两个整数为n1和n2。已知1是一个公约数,但是它可能不是最大公约数。所以,可以检测 k ( k=2,3,4…)是否为n1和n2的最大公约数,直到k大于n1或n2。公约数存储在名为gcd的变量中,gcd的初值设为1。当找到一个新的公约数时,它就成为新的gcd。当检查完在2到n1或n2之间所有可能的公约数后,变量gcd的值就是最大公约数。一旦你有了一个逻辑方案,编写代码将该方案翻译成Java程序。

    1. import java.util.Scanner;
    2. public class Demo33 {
    3. /*
    4. 如何编写程序来求最大公约数呢?
    5. 两个整数4和2的最大公约数是2。两个整数16和24的最大公约数是8。是否立刻就开始编写代码?
    6. 不对。在编写代码之前进行思考是非常重要的。思考让你可以在考虑如何编写代码前,生成解决问题的逻辑方案。
    7. 设输入的两个整数为n1和n2。已知1是一个公约数,但是它可能不是最大公约数。
    8. 所以,可以检测 k ( k=2,3,4…)是否为n1和n2的最大公约数,直到k大于n1或n2。
    9. 公约数存储在名为gcd的变量中,gcd的初值设为1。当找到一个新的公约数时,它就成为新的gcd。
    10. 当检查完在2到n1或n2之间所有可能的公约数后,变量gcd的值就是最大公约数。
    11. 一旦你有了一个逻辑方案,编写代码将该方案翻译成Java程序。
    12. */
    13. public static void main(String[] args) {
    14. Scanner scan = new Scanner(System.in);
    15. System.out.println("请输入两个整数:");
    16. int n1 = scan.nextInt();
    17. int n2 = scan.nextInt();
    18. int min = n1 < n2 ? n1 : n2;
    19. int max = n1 > n2 ? n1 : n2;
    20. // int min = Math.min(n1, n2);
    21. int gcd = 1;
    22. gcd = maxCommonDivisor(gcd, min, max);
    23. System.out.println(n1 + "、" + n2 + "的最的公约数为:" + gcd);
    24. }
    25. private static int maxCommonDivisor(int gcd, int min, int max) {
    26. for (int i = 2; i <= min; i++){
    27. if (max % i == 0) {
    28. gcd = i;
    29. }
    30. }
    31. return gcd;
    32. }
    33. }

    结果:

    Demo34. 如何将一个十进制数转换为十六进制数呢?

           计算机系统的程序设计中会经常用到十六进制数。将十进制数d转换为十六进制数,就是找到满足以下条件的十六进制数h(n),h(n-1),h(n-2),…,h2,h1和h0:
            d = h_{n}*16^n + h_{n-1}*16^{n-1} + h_{n-2}*16^{n-2} + ... + h_{2}*16^{2} + h_{1}*16^{1} + h_{0}*16^{0}
    这些数可以通过不断地用d除以16直到商为零而得到。依次得到的余数是h(n),h(n-1),h(n-2),…,h2,h1和h0。十六进制数字包含十进制数字0、1、2、3、4、5、6、7、8、9以及表示十进制数字10的A,表示十进制数字11的B,表示12的C,13的D,14的E和表示15的F。

    1. import java.util.Scanner;
    2. public class Demo34 {
    3. /*
    4. 计算机系统的程序设计中会经常用到十六进制数。
    5. 将十进制数d转换为十六进制数,就是找到满足以下条件的十六进制数h(n),h(n-1),h(n-2),…,h2,h1和h0:
    6. 这些数可以通过不断地用d除以16直到商为零而得到。
    7. 依次得到的余数是h(n),h(n-1),h(n-2),…,h2,h1和h0。
    8. 十六进制数字包含十进制数字0、1、2、3、4、5、6、7、8、9
    9. 以及表示十进制数字10的A,表示十进制数字11的B,表示12的C,13的D,14的E和表示15的F。
    10. */
    11. public static void main(String[] args) {
    12. Scanner scan = new Scanner(System.in);
    13. System.out.println("请输入一个整数:");
    14. int d = scan.nextInt();
    15. String hex = decimalToHex(d);
    16. System.out.println(d + "的十六进制值为:" + hex);
    17. }
    18. public static String decimalToHex(int d) {
    19. if (d < 16) {
    20. return d < 9 ? d + "": (char)(d - 10 + 'A')+ "";
    21. }else {
    22. return decimalToHex(d / 16) + (d % 16 < 9 ? d % 16 + "": (char)(d % 16 - 10 + 'A')+ "");
    23. }
    24. /*
    25. 161
    26. 10 1 ==> A1
    27. 1601
    28. 100 1
    29. 6 4 ==> 641
    30. */
    31. }
    32. }

    结果:

    Demo35. 编写一个程序,提示用户输人一个字符串,然后给出该字符串是否是回文

           如果一个字符串从前往后,以及从后往前是一样的,那么它就是一个回文。例如,“mom”、“ dad”,以及“noon”,都是回文。一个解决方案是,判断字符串的第一个字符是否和最后一个字符一样。如果是,判断第二个字符是否和倒数第二个字符一样。这个过程一直持续到找到不匹配的,或者字符串中所有的字符都进行了判断。如果字符串具有奇数个字符,那么中间的字符就不需要判断了。

    1. public class Demo35 {
    2. // 编写一个程序,提示用户输人一个字符串,然后给出该字符串是否是回文
    3. // 例如,“mom”、“ dad”,以及“noon”,都是回文
    4. public static void main(String[] args) {
    5. String s = "mom";
    6. String s1 = "noon";
    7. String s2 = "noonn";
    8. if (judgePalindrome(s)) {
    9. System.out.println(s + "是回文字符串");
    10. } else {
    11. System.out.println(s + "不是回文字符串!");
    12. }
    13. }
    14. private static boolean judgePalindrome(String s) {
    15. for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
    16. if(s.charAt(i) != s.charAt(j)) {
    17. return false;
    18. }
    19. }
    20. return true;
    21. }
    22. }

    结果:

    Demo36. 质数输出,在5行中显示前50个素数,每行包含10个数

    大于1的整数,如果它的正因子只有1和它自身,那么该整数就是素数。例如:2、3、5、7都是素数,而4、6、8、9不是。现在的问题是在5行中显示前50个素数,每行包含10个数。该问题可分解成以下任务:a. 判断一个给定数是否是素数。b. 针对number=2,3,4,5,6,…,测试它是否为素数。统计素数的个数。打印每个素数,每行打印10个。

    1. import java.util.Scanner;
    2. public class Demo36 {
    3. /*
    4. 质数输出,在5行中显示前50个素数,每行包含10个数
    5. 大于1的整数,如果它的正因子只有1和它自身,那么该整数就是素数。
    6. 例如:2、3、5、7都是素数,而4、6、8、9不是。
    7. 现在的问题是在5行中显示前50个素数,每行包含10个数。
    8. 该问题可分解成以下任务:
    9. a. 判断一个给定数是否是素数。
    10. b. 针对number=2,3,4,5,6,…,测试它是否为素数。
    11. 统计素数的个数。打印每个素数,每行打印10个。
    12. */
    13. public static void main(String[] args) {
    14. Scanner scan = new Scanner(System.in);
    15. System.out.println("请输入一个数n:");
    16. int n = scan.nextInt();
    17. PrimeNumber(n);
    18. scan.close();
    19. }
    20. private static void PrimeNumber(int n) {
    21. int count = 0;
    22. for (int i = 2; i <= n; i++) {
    23. boolean isFlag = true;
    24. for (int j = 2; j < i / 2 + 1; j++) {
    25. if (i % j == 0) {
    26. isFlag = false;
    27. break;
    28. }
    29. }
    30. if (isFlag) {
    31. System.out.print(i + "\t");
    32. count++;
    33. if (count % 10 == 0){
    34. System.out.println();
    35. }
    36. if(count == 50) {
    37. break;
    38. }
    39. }
    40. }
    41. }
    42. }

    结果:

    Demo37. 统计正数和负数的个数然后计算这些数的平均值

           编写程序,读入未指定个数的整数,判断读人的正数有多少个,读入的负数有多少个,然后计算这些输入值的总和及其平均值(不对0计数)。当输入为0时,表明程序结束。将平均值以浮点数显示。下面是一个运行示例:

    1. import java.util.Scanner;
    2. public class Demo37 {
    3. /*
    4. 统计正数和负数的个数然后计算这些数的平均值
    5. 编写程序,读入未指定个数的整数,判断读人的正数有多少个,读入的负数有多少个,
    6. 然后计算这些输入值的总和及其平均值(不对0计数)。
    7. 当输入为0时,表明程序结束。将平均值以浮点数显示。下面是一个运行示例
    8. */
    9. public static void main(String[] args) {
    10. Scanner scan = new Scanner(System.in);
    11. System.out.println("请输入若干个整数:");
    12. int a, countPositive = 0, countNegative = 0;
    13. int sum = 0;
    14. while (true){
    15. a = scan.nextInt();
    16. if (a < 0) {
    17. countNegative++;
    18. }else if (a > 0){
    19. countPositive++;
    20. }else {
    21. break;
    22. }
    23. sum += a;
    24. }
    25. double aver = 0;
    26. if (countNegative + countPositive != 0) {
    27. aver = sum / (double)(countNegative + countPositive);
    28. System.out.println("正数个数为:" + countPositive);
    29. System.out.println("负数个数为:" + countNegative);
    30. System.out.println("输入值的总和为:" + sum);
    31. System.out.println("输入值的平均值为:" + aver);
    32. }else {
    33. System.out.println("没有输入有效值");
    34. }
    35. scan.close();
    36. }
    37. }

    结果:

    Demo38. (找出能被5和6整除的数)编写程序,显示从100到1000之间所有能被5和6整除的数,每行显示10个。数字之间用一个空格字符隔开。

    1. public class Demo38 {
    2. /*
    3. (找出能被5和6整除的数)编写程序,显示从100到1000之间所有能被5和6整除的数,
    4. 每行显示10个。数字之间用一个空格字符隔开。
    5. */
    6. public static void main(String[] args) {
    7. printNum();
    8. }
    9. private static void printNum() {
    10. int count = 0;
    11. for (int i = 100; i <= 1000; i++) {
    12. if (i % 5 == 0 && i % 6 == 0) {
    13. System.out.print(i + " ");
    14. count++;
    15. // if (count % 10 == 0) {
    16. // System.out.println();
    17. // }
    18. if (count == 10) {
    19. System.out.println();
    20. count = 0;
    21. }
    22. }
    23. }
    24. }
    25. }

    结果:

    Demo39. (找出能被5或6整除,但不能被两者同时整除的数)编写程序,显示从100到200之间所有能被5或6整除,但不能被两者同时整除的数,每行显示10个数。数字之间用一个空格字符隔开。

    1. public class Demo39 {
    2. /*
    3. (找出能被5或6整除,但不能被两者同时整除的数)
    4. 编写程序,显示从100到200之间所有能被5或6整除,但不能被两者同时整除的数,
    5. 每行显示10个数。数字之间用一个空格字符隔开。
    6. */
    7. public static void main(String[] args) {
    8. printNum1();
    9. }
    10. private static void printNum1() {
    11. int count = 0;
    12. for (int i = 100; i <= 200; i++) {
    13. if ((i % 5 == 0 || i % 6 == 0) && !(i % 5 == 0 && i % 6 == 0)) {
    14. System.out.print(i + " ");
    15. count++;
    16. if (count % 10 == 0) {
    17. System.out.println();
    18. }
    19. // if (count == 10) {
    20. // System.out.println();
    21. // count = 0;
    22. // }
    23. }
    24. }
    25. }
    26. }

    结果:

    Demo40. (找出一个整数的因子)编写程序,读入一个整数,然后以升序显示它的所有最小因子。例如,若输入的整数是120,那么输出就应该是:2,2,2,3,5。

    1. import java.util.Scanner;
    2. public class Demo40 {
    3. /*
    4. (找出一个整数的因子)编写程序,读入一个整数,然后以升序显示它的所有最小因子。
    5. 例如,若输入的整数是120,那么输出就应该是:2,2,2,3,5。
    6. */
    7. public static void main(String[] args) {
    8. Scanner scan = new Scanner(System.in);
    9. System.out.println("请输入一个整数:");
    10. int num = scan.nextInt();
    11. printFactor(num);
    12. }
    13. private static void printFactor(int num) {
    14. // int n = num;
    15. for (int i = 2; i <= num; i++) {
    16. while (num % i == 0) {
    17. num = num / i;
    18. System.out.print(i + " ");
    19. // n /= i;
    20. }
    21. }
    22. }
    23. }

    结果:

  • 相关阅读:
    现货白银书籍那个好
    原生K8S部署pig微服务项目
    Android 5.1 open data flow 数据开启流程
    python random应用实例 从可选池随机选取指定个数的元素并随机排序
    web前端大作业--美团外卖1
    12月5日:thinkphp模板
    LeetCode-795-区间子数组个数
    进销存仓库管理系统的优势(一)
    数据中台之用户画像
    Ubuntu 22 Python 虚拟环境配置
  • 原文地址:https://blog.csdn.net/weixin_51612062/article/details/125875707