• Java编程练习题Demo41-Demo50


    目录

    Demo41. (显示金字塔)编写程序,提示用户输入一个在1到15之间的整数,然后显示一个金字塔形状的图案,如下面的运行示例所示:

    Demo42. (使用循环语句打印4个图案)使用嵌套的循环语句,用四个独立的程序打印下面的图案:

    Demo43. (打印金字塔形的数字)编写一个嵌套的for循环,打印下面的输出

    Demo44. (打印2到1000之间的素数)修改程序清单5-15,打印2到1000之间、包括2和1000的所有素数,每行显示8个素数。数字之间用一个空格字符隔开。

    Demo45. (数列求和)编写程序,计算下面数列的和:1/3 + 3/5 + 5/7 + 7/9 + 9/11 + 11/13 + ... + 95/97 + 97/99

    Demo46. (计算π)使用下面的数列可以近似计算π:

    Demo47. 使用下面的数列可以近似的计算e:

    Demo48. (完全数)编写程序,找出这四个完全数。

    Demo49. (游戏:石头、剪刀、布)编程练习题Demo24,给出玩石头-剪刀-布游戏的程序。修改这个程序,让用户可以连续地玩这个游戏,直到用户或者计算机赢对手两次以上为止。

    Demo50. (十进制到二进制)编写程序,提示用户输人一个十进制整数,然后显示对应的二进制值。在这个程序中不要使用Java的Interger.toBinaryString(int)方法。


    Demo41. (显示金字塔)编写程序,提示用户输入一个在1到15之间的整数,然后显示一个金字塔形状的图案,如下面的运行示例所示:

    1. import java.util.Scanner;
    2. public class Demo41 {
    3. /*
    4. (显示金字塔)编写程序,提示用户输入一个在1到15之间的整数,
    5. 然后显示一个金字塔形状的图案,如下面的运行示例所示:
    6. 1
    7. 2 1 2
    8. 3 2 1 2 3
    9. 4 3 2 1 2 3 4
    10. 5 4 3 2 1 2 3 4 5
    11. 6 5 4 3 2 1 2 3 4 5 6
    12. 7 6 5 4 3 2 1 2 3 4 5 6 7
    13. */
    14. public static void main(String[] args) {
    15. Scanner scan = new Scanner(System.in);
    16. System.out.println("请输入一个整数(1-15):");
    17. int num = scan.nextInt();
    18. pyramid(num);
    19. }
    20. public static void pyramid(int num) {
    21. for (int i = 1; i <= num; i++) {
    22. for (int j = 0; j < 2 * (num - i); j++) {
    23. System.out.print(" ");
    24. }
    25. for (int k = 0; k < i; k++) {
    26. System.out.print(i-k + " ");
    27. }
    28. for (int k = 2; k <= i; k++) {
    29. System.out.print(k + " ");
    30. }
    31. System.out.println("");
    32. }
    33. }
    34. }

    结果:

    Demo42. (使用循环语句打印4个图案)使用嵌套的循环语句,用四个独立的程序打印下面的图案:

    1. public class Demo42 {
    2. /*
    3. (使用循环语句打印4个图案)使用嵌套的循环语句,用四个独立的程序打印下面的图案
    4. */
    5. public static void main(String[] args) {
    6. // 图案1
    7. printPattern1();
    8. System.out.println();
    9. // 图案2
    10. printPattern2();
    11. System.out.println();
    12. // 图案3
    13. printPattern3();
    14. System.out.println();
    15. // 图案4
    16. printPattern4();
    17. }
    18. /*
    19. 1
    20. 1 2
    21. 1 2 3
    22. 1 2 3 4
    23. 1 2 3 4 5
    24. 1 2 3 4 5 6
    25. */
    26. public static void printPattern1() {
    27. for (int i = 1; i <= 6; i++) {
    28. for (int j = 1; j <= i; j++) {
    29. System.out.print(j + " ");
    30. }
    31. System.out.println();
    32. }
    33. }
    34. /*
    35. 1 2 3 4 5 6
    36. 1 2 3 4 5
    37. 1 2 3 4
    38. 1 2 3
    39. 1 2
    40. 1
    41. */
    42. public static void printPattern2() {
    43. for (int i = 0; i < 6; i++) {
    44. for (int j = 1; j <= 6 - i; j++) {
    45. System.out.print(j + " ");
    46. }
    47. System.out.println();
    48. }
    49. }
    50. /*
    51. 1
    52. 2 1
    53. 3 2 1
    54. 4 3 2 1
    55. 5 4 3 2 1
    56. 6 5 4 3 2 1
    57. */
    58. public static void printPattern3() {
    59. for (int i = 1; i <= 6; i++) {
    60. for (int k = 0; k < 2 * (6 - i); k++) {
    61. System.out.print(" ");
    62. }
    63. for (int j = i; j > 0; j--) {
    64. System.out.print(j + " ");
    65. }
    66. System.out.println();
    67. }
    68. }
    69. /*
    70. 1 2 3 4 5 6
    71. 1 2 3 4 5
    72. 1 2 3 4
    73. 1 2 3
    74. 1 2
    75. 1
    76. */
    77. public static void printPattern4() {
    78. for (int i = 1; i <= 6; i++) {
    79. for (int k = 0; k < 2 * (i - 1); k++) {
    80. System.out.print(" ");
    81. }
    82. for (int j = 1; j <= 7 - i; j++) {
    83. System.out.print(j + " ");
    84. }
    85. System.out.println();
    86. }
    87. }
    88. }

    结果:

    Demo43. (打印金字塔形的数字)编写一个嵌套的for循环,打印下面的输出

    1. public class Demo43 {
    2. /*
    3. (打印金字塔形的数字)编写一个嵌套的for循环,打印下面的输出
    4. */
    5. public static void main(String[] args) {
    6. numPyramid();
    7. }
    8. /*
    9. 1 2 4 8
    10. 1 2 4 8 16
    11. */
    12. public static void numPyramid() {
    13. for (int i = 0; i < 8; i++) {
    14. for (int k = 1; k <= (8 - i - 1); k++) {
    15. System.out.print("\t");
    16. }
    17. for (int j = 1; j <= Math.pow(2, i); j *= 2) {
    18. System.out.print(j + "\t");
    19. }
    20. for (int j = (int) (Math.pow(2, i - 1)); j > 0; j /= 2) {
    21. System.out.print(j + "\t");
    22. }
    23. System.out.println();
    24. }
    25. }
    26. }

    结果:

    Demo44. (打印2到1000之间的素数)修改程序清单5-15,打印2到1000之间、包括2和1000的所有素数,每行显示8个素数。数字之间用一个空格字符隔开。

    1. package Exer;
    2. public class Demo44 {
    3. /*
    4. (打印2到1000之间的素数)修改程序清单5-15,
    5. 打印2到1000之间、包括2和1000的所有素数,每行显示8个素数。
    6. 数字之间用一个空格字符隔开。
    7. */
    8. public static void main(String[] args) {
    9. primeNumber();
    10. }
    11. private static void primeNumber() {
    12. int count = 0;
    13. for (int i = 2; i <= 1000; i++) {
    14. boolean isFlag = true;
    15. for (int j = 2; j <= i / 2; j++) {
    16. if (i % j == 0) {
    17. isFlag = false;
    18. }
    19. }
    20. if (isFlag) {
    21. System.out.print(i + "\t");
    22. count ++;
    23. if (count % 8 == 0) {
    24. System.out.println();
    25. }
    26. }
    27. }
    28. }
    29. }

    结果:

    Demo45. (数列求和)编写程序,计算下面数列的和:1/3 + 3/5 + 5/7 + 7/9 + 9/11 + 11/13 + ... + 95/97 + 97/99

    1. package Exer;
    2. public class Demo45 {
    3. /*
    4. (数列求和)编写程序,计算下面数列的和:1/3 + 3/5 + 5/7 + 7/9 + 9/11 + 11/13 + ... + 95/97 + 97/99
    5. 2n-1/2n+1
    6. */
    7. public static void main(String[] args) {
    8. System.out.println(sumSequence());
    9. System.out.println(sumSequence1(49));
    10. }
    11. // 循环
    12. private static double sumSequence() {
    13. // int n = 0;
    14. double sum = 0;
    15. for (int i = 1; i < 50; i++) {
    16. sum += (double)(2 * i - 1) / (2 * i + 1);
    17. }
    18. return sum;
    19. }
    20. // 递归
    21. private static double sumSequence1(int i) {
    22. // int n = 0;
    23. if (i == 1) {
    24. return (double)(2 * i - 1) / (2 * i + 1);
    25. }
    26. return (double)(2 * i - 1) / (2 * i + 1) + sumSequence1(i - 1);
    27. }
    28. }

    结果:

    Demo46. (计算π)使用下面的数列可以近似计算π:

    \pi = 4(1-\frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \frac{1}{9} - \frac{1}{11} + \frac{(-1)^{i + 1}}{2i -1})

    1. public class Demo46 {
    2. /*
    3. (计算n)使用下面的数列可以近似计算π
    4. */
    5. public static void main(String[] args) {
    6. System.out.println(countPI());
    7. double result = countPI1(1000);
    8. double PI = result * 4;
    9. System.out.println(PI);
    10. }
    11. private static double countPI() {
    12. double sum = 0;
    13. for (int i = 1; i < 100000000; i++) {
    14. sum += (Math.pow(-1, i + 1) / (2 * i - 1));
    15. }
    16. sum *= 4;
    17. return sum;
    18. }
    19. // 递归, 如果传入的n过大,容易造成栈溢出异常
    20. private static double countPI1(int n) {
    21. if (n == 1) {
    22. return (Math.pow(-1, n + 1) / (2 * n - 1));
    23. }
    24. return (Math.pow(-1, n + 1) / (2 * n - 1)) + countPI1(n - 1);
    25. }
    26. }

    结果:

    Demo47. 使用下面的数列可以近似的计算e:

    e=1 + \frac{1}{1!} + \frac{1}{2!} + \frac{1}{3!} + \frac{1}{4!} + ... + \frac{1}{i!}

    编写程序,显示当i = 10000,20000,...,100000时e的值。

    提示:由于i! = i × (i - 1) × … × 2 × 1,那么1/i! = 1/i(i-1)!。将e和通项item初始化为1,反复将新的item加到e上。新的item由前一个item除以i得到,其中i=2,3,4,…。

    1. public class Demo47 {
    2. /*
    3. 使用下面的数列可以近似的计算e:
    4. */
    5. public static void main(String[] args) {
    6. System.out.println(countE());
    7. }
    8. private static double countE() {
    9. double sum = 1;
    10. for (int i = 1; i < 14; i++) {
    11. int factorial = 1;
    12. for (int j = 1; j <= i; j++) {
    13. factorial *= j;
    14. }
    15. sum += 1.0 / factorial;
    16. }
    17. return sum;
    18. }
    19. }

    结果:

    Demo48. (完全数)编写程序,找出这四个完全数。

           如果一个正整数等于除它本身之外其他所有除数之和,就称之为完全数。例如:6是第一个完全数,因为6=1+2+3。下一个完全数是28=14+7+4+2+1。10 000以下的完全数有四个。

    1. public class Demo48 {
    2. /*
    3. (完全数)编写程序,找出这四个完全数
    4. 如果一个正整数等于除它本身之外其他所有除数之和,就称之为完全数。
    5. 例如:6是第一个完全数,因为6=1+2+3。下一个完全数是28=14+7+4+2+1。10000以下的完全数有四个。
    6. */
    7. public static void main(String[] args) {
    8. completeNum();
    9. }
    10. private static void completeNum() {
    11. for (int i = 6; i < 10000; i++) {
    12. int sum = 0;
    13. for (int j = 1; j <= i / 2; j++) {
    14. if (i % j == 0) {
    15. sum += j;
    16. }
    17. }
    18. if (i == sum) {
    19. System.out.println(i);
    20. }
    21. }
    22. }
    23. }

    结果:

    Demo49. (游戏:石头、剪刀、布)编程练习题Demo24,给出玩石头-剪刀-布游戏的程序。修改这个程序,让用户可以连续地玩这个游戏,直到用户或者计算机赢对手两次以上为止。

    1. package Exer;
    2. import java.util.Scanner;
    3. public class Demo49 {
    4. /*
    5. (游戏:石头、剪刀、布)编程练习题Demo24,给出玩石头-剪刀-布游戏的程序。
    6. 修改这个程序,让用户可以连续地玩这个游戏,直到用户或者计算机赢对手两次以上为止。
    7. (剪刀可以剪布,石头可以砸剪刀,而布可以包石头。)
    8. 程序随机产生一个数,这个数为0、1或者2,分别表示石头、剪刀和布。
    9. 程序提示用户输人值0、1或者2,
    10. */
    11. public static void main(String[] args) {
    12. Scanner scan = new Scanner(System.in);
    13. int countPlay1 = 0, countPlay2 = 0;
    14. while (true) {
    15. int play1 = (int) (Math.random() * 3); // 随机一个[0, 3)的整数;
    16. System.out.println("请输入0、1或者2,分别表示石头、剪刀和布:");
    17. int play2 = scan.nextInt();
    18. int result = guessHand(play1, play2);
    19. if (result == 1) {
    20. countPlay2++;
    21. System.out.println("你赢了 " + countPlay2 + " 局了");
    22. } else if (result == 2) {
    23. countPlay1++;
    24. System.out.println("电脑赢了" + countPlay1 + "局了");
    25. } else if (result == 3) {
    26. System.out.println("打成平手");
    27. } else {
    28. System.out.println("你出的有误!");
    29. }
    30. if (countPlay1 > 2) {
    31. System.out.println("游戏结束,很遗憾你输了!电脑赢了");
    32. break;
    33. }
    34. if (countPlay2 > 2) {
    35. System.out.println("游戏结束,恭喜你赢了!战胜了电脑");
    36. break;
    37. }
    38. }
    39. }
    40. private static int guessHand(int play1, int play2) {
    41. if (play2 < 0 || play2 > 2) {
    42. return 0;
    43. } else {
    44. // (剪刀可以剪布,石头可以砸剪刀,而布可以包石头。)
    45. // 0 石头,1 剪刀,2 布
    46. if (play1 == 0 && play2 == 1) {
    47. System.out.println("恭喜你赢了!战胜了电脑");
    48. return 1;
    49. } else if (play1 == 0 && play2 == 2) {
    50. System.out.println("很遗憾你输了!电脑赢了");
    51. return 2;
    52. } else if (play1 == 1 && play2 == 0) {
    53. System.out.println("很遗憾你输了!电脑赢了");
    54. return 2;
    55. } else if (play1 == 1 && play2 == 2) {
    56. System.out.println("恭喜你赢了!战胜了电脑");
    57. return 1;
    58. } else if (play1 == 2 && play2 == 0) {
    59. System.out.println("恭喜你赢了!战胜了电脑");
    60. return 1;
    61. } else if (play1 == 2 && play2 == 1) {
    62. System.out.println("很遗憾你输了!电脑赢了");
    63. return 2;
    64. } else { // play1 == play2
    65. return 3;
    66. }
    67. }
    68. }
    69. }

    结果:

    Demo50. (十进制到二进制)编写程序,提示用户输人一个十进制整数,然后显示对应的二进制值。在这个程序中不要使用Java的Interger.toBinaryString(int)方法。

    1. import java.util.Scanner;
    2. public class Demo50 {
    3. /*
    4. (十进制到二进制)编写程序,提示用户输人一个十进制整数,然后显示对应的二进制值。
    5. 在这个程序中不要使用Java的Interger.toBinaryString(int)方法。
    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. toBinary(num);
    12. }
    13. /*
    14. 10
    15. 5 0
    16. 2 1
    17. 1 0
    18. 0 1 ==> 1010
    19. */
    20. private static void toBinary(int num) {
    21. String binary = "";
    22. while (num / 2 != 0) {
    23. binary = (num % 2) + binary;
    24. num /= 2;
    25. }
    26. binary = num + binary;
    27. System.out.println(binary);
    28. }
    29. }

    结果:

  • 相关阅读:
    Java并发编程实战读书笔记三
    nexus5x 刷机root
    因为模型参数量小,仅考虑该模型是否成功被调用)(如果没有渠道打开Huggingface,可以用其镜像网站hf-mirror代替,如何解决?
    3、传统的Synchronized锁
    【Node.js项目】大事件项目:后台架构图(含具体技术栈)、典型代码
    Ubuntu离线安装g++、locales
    7.10飞书一面面经
    一个动力密集型产业的预算的数据分析建模过程
    Python编写Word文档
    在C语言中,堆和栈是两种不同的内存分配机制
  • 原文地址:https://blog.csdn.net/weixin_51612062/article/details/126003169