• Java编程练习题Demo71-Demo80


    目录

    Demo71 (MyTriangle类)创建一个名为MyTriangle的类,它包含如下两个方法: 编写一个测试程序,读入三角形三边的值,若输入有效,则计算面积;否则显示输入无效。

    Demo72 (计算一个字符串中字母的个数)编写一个方法,使用下面的方法头计算字符串中的字母个数:public static int countLetters(String s),编写一个测试程序,提示用户输入字符串,然后显示字符串中的字母个数。

    Demo73 (数学:平方根的近似求法)有几种实现Math类中sqrt方法的技术。其中一个称为巴比伦法。

    Demo74 (回文素数)回文素数是指一个数同时为素数和回文数。例如:131是一个素数,同时也是一个回文素数。数字313和757也是如此。编写程序,显示前100个回文素数。每行显示10个数并且准确对齐,数字中间用空格隔开。

    Demo75 (反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数。例如:17是一个素数,而71也是一个素数,所以17和71是反素数。编写程序,显示前100个反素数。每行显示10个,并且数字间用空格隔开

    Demo76 (梅森素数) 如果一个素数可以写成(2^p)-1的形式,其中p是某个正整数,那么这个素数就称作梅森素数。编写程序,找出p≤31的所有梅森素数,然后显示如下的输出结果:

    Demo77 (双素数) 双素数是指一对差值为2的素数。例如:3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数。编写程序,找出小于1000的所有双素数。

    Demo78 (几何问题:五边形的面积) 编写一个方法,使用下面的方法头来返回五边形的面积。编写一个主方法,提示用户输入五边形的边,然后显示它的面积。

    Demo79 (几何问题:正多边形的面积) 正多边形是一个n条边的多边形,它的每条边的长度都相等,而且所有角的角度也相等(即多边形既是等边又等角的)。编写一个main方法,提示用户输人边的个数以及正多边形的边长,然后显示它的面积。

    Demo80 递归解决斐波那契数列


    Demo71 (MyTriangle类)创建一个名为MyTriangle的类,它包含如下两个方法: 编写一个测试程序,读入三角形三边的值,若输入有效,则计算面积;否则显示输入无效。

    三角形面积的计算公式在编程练习题Demo16中给出。

           s = (边1 + 边2 + 边3 ) / 2

           面积 = √(s(s - 边1)(s - 边2)(s - 边3))

    1. package Exer2;
    2. import java.util.Scanner;
    3. public class Demo71 {
    4. /*
    5. (MyTriangle类)创建一个名为MyTriangle的类,它包含如下两个方法:
    6. 编写一个测试程序,读入三角形三边的值,若输入有效,则计算面积;否则显示输入无效。
    7. 三角形面积的计算公式在编程练习题2.19中给出。
    8. s = (边1 + 边2 + 边3 ) / 2
    9. 面积 = √(s(s - 边1)(s - 边2)(s - 边3))
    10. */
    11. public static void main(String[] args) {
    12. Scanner scanner = new Scanner(System.in);
    13. System.out.println("请输入三角形的三边长:");
    14. double side1 = scanner.nextInt();
    15. double side2 = scanner.nextInt();
    16. double side3 = scanner.nextInt();
    17. if (isValid(side1, side2, side3)) {
    18. double area = area(side1, side2, side3);
    19. System.out.println("三角形的面积为:" + area);
    20. } else {
    21. System.out.println("输入无效!");
    22. }
    23. }
    24. /* Return true if the sum of any two sides is greater than the third side. */
    25. public static boolean isValid(double side1, double side2, double side3) {
    26. return side1 + side2 > side3 && side1 + side3 > side2 && side2 + side3 > side1;
    27. }
    28. /* Return the area of the triangle. */
    29. public static double area(double side1, double side2, double side3) {
    30. double s = (side1 + side2 + side3) / 2;
    31. return Math.pow(s * (s - side1) * (s - side2) * (s - side3), 0.5);
    32. }
    33. }

    结果:

    Demo72 (计算一个字符串中字母的个数)编写一个方法,使用下面的方法头计算字符串中的字母个数:public static int countLetters(String s),编写一个测试程序,提示用户输入字符串,然后显示字符串中的字母个数。

    1. package Exer2;
    2. import java.util.Scanner;
    3. public class Demo72 {
    4. /*
    5. (计算一个字符串中字母的个数)编写一个方法,使用下面的方法头计算字符串中的字母个数:
    6. public static int countLetters(String s)
    7. 编写一个测试程序,提示用户输入字符串,然后显示字符串中的字母个数。
    8. */
    9. public static void main(String[] args) {
    10. Scanner scan = new Scanner(System.in);
    11. System.out.print("请输入一个字符串:");
    12. String str = scan.nextLine();
    13. System.out.println(str + " 中的字母个数:" + countLetters(str));
    14. scan.close();
    15. }
    16. public static int countLetters(String s) {
    17. int count = 0;
    18. for (int i = 0; i < s.length(); i++) {
    19. if (Character.isLetter(s.charAt(i))) {
    20. count++;
    21. }
    22. }
    23. return count;
    24. }
    25. }

    结果:

    Demo73 (数学:平方根的近似求法)有几种实现Math类中sqrt方法的技术。其中一个称为巴比伦法。

           它通过使用下面公式的反复计算近似地得到:nextGuess = (lastGuess + n / lastGuess) / 2

           当nextGuess和lastGuess几乎相同时,nextGuess 就是平方根的近似值。最初的猜测值可以是任意一个正值(例如1)。这个值就是lastGuess的初始值。如果nextGuess和lastGuess的差小于一个很小的数,比如0.0001,就可以认为nextGuess是n的平方根的近似值;否则,nextGuess就成为lastGuess,近似过程继续执行。实现下面的方法,返回n的平方根。
            public static double sqrt(long n)

    1. package Exer2;
    2. public class Demo73 {
    3. public static void main(String[] args) {
    4. System.out.println(sqrt(5));
    5. }
    6. public static double sqrt(long n) {
    7. double lastGuess = 1;
    8. double nextGuess = (lastGuess + n / lastGuess) / 2;
    9. while (true) {
    10. if (Math.abs(lastGuess - nextGuess) < 0.0001) {
    11. break;
    12. } else {
    13. lastGuess = nextGuess;
    14. nextGuess = (lastGuess + n / lastGuess) / 2;
    15. }
    16. }
    17. return nextGuess;
    18. }
    19. }

    结果:

    Demo74 (回文素数)回文素数是指一个数同时为素数和回文数。例如:131是一个素数,同时也是一个回文素数。数字313和757也是如此。编写程序,显示前100个回文素数。每行显示10个数并且准确对齐,数字中间用空格隔开。

    如下所示:
    2 3 5 7 11 101 131 151 181 191
    313 353 373 383 727 757 787 797 919 929

    1. package Exer2;
    2. public class Demo74 {
    3. /*
    4. (回文素数)回文素数是指一个数同时为素数和回文数。例如:131是一个素数,同时也是一个回文素数。数字313和757也是如此。
    5. 编写程序,显示前100个回文素数。每行显示10个数并且准确对齐,数字中间用空格隔开。
    6. 如下所示:
    7. 2 3 5 7 11 101 131 151 181 191
    8. 313 353 373 383 727 757 787 797 919 929
    9. */
    10. public static void main(String[] args) {
    11. isPalindromeAndPrimeNum();
    12. }
    13. public static void isPalindromeAndPrimeNum() {
    14. int count = 0;
    15. for (int i = 2; i < 1000000; i++) {
    16. boolean isFlag = true;
    17. for (int j = 2; j <= i / 2; j++) {
    18. if (i % j == 0) {
    19. isFlag = false;
    20. break;
    21. }
    22. }
    23. if (isFlag && reverse(i) == i) {
    24. count++;
    25. System.out.print(i + " \t ");
    26. if (count % 10 == 0) {
    27. System.out.println();
    28. }
    29. }
    30. if (count == 100) {
    31. break;
    32. }
    33. }
    34. }
    35. public static int reverse(int number) {
    36. int reverseNum = 0;
    37. while (number > 0) {
    38. reverseNum *= 10;
    39. reverseNum += number % 10;
    40. number /= 10;
    41. }
    42. return reverseNum;
    43. }
    44. }

    结果:

    Demo75 (反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数。例如:17是一个素数,而71也是一个素数,所以17和71是反素数。编写程序,显示前100个反素数。每行显示10个,并且数字间用空格隔开

    如下所示:
    13 17 31 37 71 73 79 97 107113
    149 157167179 199 311 337 347 359 389

    1. package Exer2;
    2. public class Demo75 {
    3. /*
    4. (反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数。
    5. 例如:17是一个素数,而71也是一个素数,所以17和71是反素数。
    6. 编写程序,显示前100个反素数。每行显示10个,并且数字间用空格隔开,
    7. 如下所示:
    8. 13 17 31 37 71 73 79 97 107 113
    9. 149 157167179 199 311 337 347 359 389
    10. */
    11. public static void main(String[] args) {
    12. isEmirp();
    13. }
    14. private static void isEmirp() {
    15. int count = 0;
    16. for (int i = 2; i < 10000; i++) {
    17. boolean isFlag = true;
    18. for (int j = 2; j <= i / 2; j++) {
    19. if (i % j == 0) {
    20. isFlag = false;
    21. break;
    22. }
    23. }
    24. if (isFlag && reverse(i) != i && isPrimeNum(reverse(i))) {
    25. count++;
    26. System.out.print(i + " \t");
    27. if (count % 10 == 0) {
    28. System.out.println();
    29. }
    30. }
    31. if (count == 100) {
    32. break;
    33. }
    34. }
    35. }
    36. public static boolean isPrimeNum(int number) {
    37. for (int i = 2; i <= number / 2; i++) {
    38. if (number % i == 0) {
    39. return false;
    40. }
    41. }
    42. return true;
    43. }
    44. private static int reverse(int number) {
    45. int reverseNum = 0;
    46. while (number > 0) {
    47. reverseNum = reverseNum * 10 + number % 10;
    48. number /= 10;
    49. }
    50. return reverseNum;
    51. }
    52. }

    结果:

    Demo76 (梅森素数) 如果一个素数可以写成(2^p)-1的形式,其中p是某个正整数,那么这个素数就称作梅森素数。编写程序,找出p≤31的所有梅森素数,然后显示如下的输出结果:

    1. package Exer2;
    2. public class Demo76 {
    3. /*
    4. (梅森素数) 如果一个素数可以写成(2^p)-1的形式,其中p是某个正整数,那么这个素数就称作梅森素数。\
    5. 编写程序,找出p≤31的所有梅森素数,然后显示如下的输出结果:
    6. */
    7. public static void main(String[] args) {
    8. printMersennePrime();
    9. }
    10. private static void printMersennePrime() {
    11. System.out.printf("%s\t\t%s%n","p", "2^p-1");
    12. System.out.println("________________");
    13. for (int p = 2; p <= 31; p++) {
    14. if (isPrimeNum((int)((Math.pow(2, p)) - 1))) {
    15. System.out.printf("%s\t\t%s%n",p, (int)((Math.pow(2, p)) - 1));
    16. }
    17. }
    18. }
    19. private static boolean isPrimeNum(int number) {
    20. for (int i = 2; i < number / 2; i++) {
    21. if (number % i == 0) {
    22. return false;
    23. }
    24. }
    25. return true;
    26. }
    27. }

    结果:

    Demo77 (双素数) 双素数是指一对差值为2的素数。例如:3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数。编写程序,找出小于1000的所有双素数。

    显示结果如下所示:

    (3, 5)

    (5, 7)

    ......

    1. package Exer2;
    2. public class Demo78 {
    3. /*
    4. (双素数) 双素数是指一对差值为2的素数。
    5. 例如:3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数。
    6. 编写程序,找出小于1000的所有双素数。
    7. */
    8. public static void main(String[] args) {
    9. for (int i = 2; i < 1000; i++) {
    10. if (isPrimeNum(i) && isPrimeNum(i + 2)) {
    11. System.out.printf("(%s, %s)%n", i, i + 2);
    12. }
    13. }
    14. }
    15. private static boolean isPrimeNum(int num) {
    16. for (int i = 2; i <= num / 2; i++) {
    17. if (num % i == 0) {
    18. return false;
    19. }
    20. }
    21. return true;
    22. }
    23. }

    结果:

    Demo78 (几何问题:五边形的面积) 编写一个方法,使用下面的方法头来返回五边形的面积。编写一个主方法,提示用户输入五边形的边,然后显示它的面积。

    五边形的面积可以使用下面的公式计算:面积 = (5 × s²) / (4 × tan(π / 5)) 

    public static double area(double side)
    下面是一个运行示例:

    1. package Exer2;
    2. import java.util.Scanner;
    3. public class Demo78 {
    4. /*
    5. (几何问题:五边形的面积) 编写一个方法,使用下面的方法头来返回五边形的面积。
    6. 编写一个主方法,提示用户输入五边形的边,然后显示它的面积。
    7. 五边形的面积可以使用下面的公式计算:面积 = (5 × s²) / (4 × tan(π / 5))
    8. public static double area(double side)
    9. */
    10. public static void main(String[] args) {
    11. Scanner scan = new Scanner(System.in);
    12. System.out.println("请输入从五边形的边长:");
    13. double side = scan.nextDouble();
    14. double area = area(side);
    15. System.out.println(area);
    16. scan.close();
    17. }
    18. public static double area(double side) {
    19. double area;
    20. area = (5 * Math.pow(side, 2)) / (4 * Math.tan(Math.PI / 5));
    21. return area;
    22. }
    23. }

    结果:

    Demo79 (几何问题:正多边形的面积) 正多边形是一个n条边的多边形,它的每条边的长度都相等,而且所有角的角度也相等(即多边形既是等边又等角的)。编写一个main方法,提示用户输人边的个数以及正多边形的边长,然后显示它的面积。

    计算正多边形面积的公式是:面积 = (n × s²) / (4 × tan(π / n)) 

    使用下面的方法头编写方法,返回正多边形的面积:public static double area(int n,double side)
    下面是一个运行示例:

    1. package Exer2;
    2. import java.util.Scanner;
    3. public class Demo79 {
    4. /*
    5. (几何问题:正多边形的面积) 正多边形是一个n条边的多边形,它的每条边的长度都相等,
    6. 而且所有角的角度也相等(即多边形既是等边又等角的)。
    7. 编写一个main方法,提示用户输人边的个数以及正多边形的边长,然后显示它的面积。
    8. 计算正多边形面积的公式是:面积 = (n × s²) / (4 × tan(π / n))
    9. 使用下面的方法头编写方法,返回正多边形的面积:
    10. public static double area(int n,double side)
    11. */
    12. public static void main(String[] args) {
    13. Scanner scan = new Scanner(System.in);
    14. System.out.println("请输入正多边形边的个数:");
    15. int n = scan.nextInt();
    16. System.out.println("请输入正多边形的边长:");
    17. double side = scan.nextDouble();
    18. double area = area(n, side);
    19. System.out.println("正多边形的面积为:" + area);
    20. scan.close();
    21. }
    22. public static double area(int n, double side) {
    23. return (n * Math.pow(side, 2)) / (4 * Math.tan(Math.PI / n));
    24. }
    25. }

    结果:

    Demo80 递归解决斐波那契数列

    1. package Exer2;
    2. import java.util.Scanner;
    3. public class Demo80 {
    4. /*
    5. 递归解决斐波那契数列
    6. */
    7. public static void main(String[] args) {
    8. Scanner scan = new Scanner(System.in);
    9. System.out.println("请输入项数:");
    10. int n = scan.nextInt();
    11. System.out.println(fibonacci(n));
    12. scan.close();
    13. }
    14. private static int fibonacci(int n) {
    15. if (n == 0) {
    16. return 0;
    17. }
    18. if (n == 1) {
    19. return 1;
    20. }
    21. return fibonacci(n - 1) + fibonacci(n - 2);
    22. }
    23. }

    结果:

  • 相关阅读:
    【node拓展】web开发模式 | express应用程序生成器
    MySQL知识总结 (一) 数据类型
    逐句回答,流式返回,ChatGPT采用的Server-sent events后端实时推送协议Python3.10实现,基于Tornado6.1
    三个本地组策略的设置实例
    去 BAT 面试完的 Mysql 面试题总结(55 道,带完整答案)
    springBoot异步线程,父子线程数据传递的5种姿势
    深刻理解JAVA并发中的有序性问题和解决之道
    k8s单master--测试环境集群搭建
    Semantic Kernel 入门系列:🪄LLM的魔法
    上海计算机学会4月月赛 丙组题解
  • 原文地址:https://blog.csdn.net/weixin_51612062/article/details/126074436