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))

package Exer2;

import java.util.Scanner;

public class Demo71 {
    /*
    (MyTriangle类)创建一个名为MyTriangle的类,它包含如下两个方法:
    编写一个测试程序,读入三角形三边的值,若输入有效,则计算面积;否则显示输入无效。
    三角形面积的计算公式在编程练习题2.19中给出。
    s = (边1 + 边2 + 边3 ) / 2
    面积 = √(s(s - 边1)(s - 边2)(s - 边3))
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入三角形的三边长:");
        double side1 = scanner.nextInt();
        double side2 = scanner.nextInt();
        double side3 = scanner.nextInt();
        if (isValid(side1, side2, side3)) {
            double area = area(side1, side2, side3);
            System.out.println("三角形的面积为:" + area);
        } else {
            System.out.println("输入无效!");
        }
    }

    /* Return true if the sum of any two sides is greater than the third side. */
    public static boolean isValid(double side1, double side2, double side3) {
        return side1 + side2 > side3 && side1 + side3 > side2 && side2 + side3 > side1;
    }

    /* Return the area of the triangle. */
    public static double area(double side1, double side2, double side3) {
        double s = (side1 + side2 + side3) / 2;
        return Math.pow(s * (s - side1) * (s - side2) * (s - side3), 0.5);
    }
}

结果:

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

package Exer2;

import java.util.Scanner;

public class Demo72 {
    /*
    (计算一个字符串中字母的个数)编写一个方法,使用下面的方法头计算字符串中的字母个数:
    public static int countLetters(String s)
    编写一个测试程序,提示用户输入字符串,然后显示字符串中的字母个数。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入一个字符串:");
        String str = scan.nextLine();
        System.out.println(str + " 中的字母个数:" + countLetters(str));
        scan.close();
    }

    public static int countLetters(String s) {
        int count = 0;
        for (int i = 0; i < s.length(); i++) {
            if (Character.isLetter(s.charAt(i))) {
                count++;
            }
        }
        return count;
    }
}

结果:

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)

package Exer2;

public class Demo73 {
    public static void main(String[] args) {
        System.out.println(sqrt(5));
    }

    public static double sqrt(long n) {
        double lastGuess = 1;
        double nextGuess = (lastGuess + n / lastGuess) / 2;
        while (true) {
            if (Math.abs(lastGuess - nextGuess) < 0.0001) {
                break;
            } else {
                lastGuess = nextGuess;
                nextGuess = (lastGuess + n / lastGuess) / 2;
            }
        }
        return nextGuess;
    }
}

结果:

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

package Exer2;

public class 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
     */
    public static void main(String[] args) {
        isPalindromeAndPrimeNum();
    }

    public static void isPalindromeAndPrimeNum() {
        int count = 0;
        for (int i = 2; i < 1000000; i++) {
            boolean isFlag = true;
            for (int j = 2; j <= i / 2; j++) {
                if (i % j == 0) {
                    isFlag = false;
                    break;
                }
            }
            if (isFlag && reverse(i) == i) {
                count++;
                System.out.print(i + " \t ");
                if (count % 10 == 0) {
                    System.out.println();
                }
            }
            if (count == 100) {
                break;
            }
        }
    }

    public static int reverse(int number) {
        int reverseNum = 0;
        while (number > 0) {
            reverseNum *= 10;
            reverseNum += number % 10;
            number /= 10;
        }
        return reverseNum;
    }
}

结果:

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

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

package Exer2;

public class Demo75 {
    /*
    (反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数。
    例如:17是一个素数,而71也是一个素数,所以17和71是反素数。
    编写程序,显示前100个反素数。每行显示10个,并且数字间用空格隔开,
    如下所示:
        13 17 31 37 71 73 79 97 107 113
        149 157167179 199 311 337 347 359 389
     */
    public static void main(String[] args) {
        isEmirp();
    }

    private static void isEmirp() {
        int count = 0;
        for (int i = 2; i < 10000; i++) {
            boolean isFlag = true;
            for (int j = 2; j <= i / 2; j++) {
                if (i % j == 0) {
                    isFlag = false;
                    break;
                }
            }
            if (isFlag && reverse(i) != i && isPrimeNum(reverse(i))) {
                count++;
                System.out.print(i + "  \t");
                if (count % 10 == 0) {
                    System.out.println();
                }
            }
            if (count == 100) {
                break;
            }
        }
    }

    public static boolean isPrimeNum(int number) {
        for (int i = 2; i <= number / 2; i++) {
            if (number % i == 0) {
                return false;
            }
        }
        return true;
    }

    private static int reverse(int number) {
        int reverseNum = 0;
        while (number > 0) {
            reverseNum = reverseNum * 10 + number % 10;
            number /= 10;
        }
        return reverseNum;
    }
}

结果:

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

package Exer2;

public class Demo76 {
    /*
    (梅森素数) 如果一个素数可以写成(2^p)-1的形式,其中p是某个正整数,那么这个素数就称作梅森素数。\
    编写程序,找出p≤31的所有梅森素数,然后显示如下的输出结果:
     */
    public static void main(String[] args) {
        printMersennePrime();
    }

    private static void printMersennePrime() {
        System.out.printf("%s\t\t%s%n","p", "2^p-1");
        System.out.println("________________");
        for (int p = 2; p <= 31; p++) {
            if (isPrimeNum((int)((Math.pow(2, p)) - 1))) {
                System.out.printf("%s\t\t%s%n",p, (int)((Math.pow(2, p)) - 1));
            }
        }
    }

    private static boolean isPrimeNum(int number) {
        for (int i = 2; i < number / 2; i++) {
            if (number % i == 0) {
                return false;
            }
        }
        return true;
    }
}

结果:

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

显示结果如下所示:

(3, 5)

(5, 7)

......

package Exer2;

public class Demo78 {
    /*
    (双素数) 双素数是指一对差值为2的素数。
    例如:3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数。
    编写程序,找出小于1000的所有双素数。
     */
    public static void main(String[] args) {
        for (int i = 2; i < 1000; i++) {
            if (isPrimeNum(i) && isPrimeNum(i + 2)) {
                System.out.printf("(%s, %s)%n", i, i + 2);
            }
        }
    }

    private static boolean isPrimeNum(int num) {
        for (int i = 2; i <= num / 2; i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

结果:

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

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

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

package Exer2;

import java.util.Scanner;

public class Demo78 {
    /*
    (几何问题:五边形的面积) 编写一个方法,使用下面的方法头来返回五边形的面积。
    编写一个主方法,提示用户输入五边形的边,然后显示它的面积。
    五边形的面积可以使用下面的公式计算:面积 = (5 × s²) / (4 × tan(π / 5))
    public static double area(double side)
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入从五边形的边长:");
        double side = scan.nextDouble();
        double area = area(side);
        System.out.println(area);
        scan.close();
    }

    public static double area(double side) {
        double area;
        area = (5 * Math.pow(side, 2)) / (4 * Math.tan(Math.PI / 5));
        return area;
    }
}

结果:

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

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

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

package Exer2;

import java.util.Scanner;

public class Demo79 {
    /*
    (几何问题:正多边形的面积) 正多边形是一个n条边的多边形,它的每条边的长度都相等,
    而且所有角的角度也相等(即多边形既是等边又等角的)。
    编写一个main方法,提示用户输人边的个数以及正多边形的边长,然后显示它的面积。
    计算正多边形面积的公式是:面积 = (n × s²) / (4 × tan(π / n))

    使用下面的方法头编写方法,返回正多边形的面积:
    public static double area(int n,double side)
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入正多边形边的个数:");
        int n = scan.nextInt();
        System.out.println("请输入正多边形的边长:");
        double side = scan.nextDouble();
        double area = area(n, side);
        System.out.println("正多边形的面积为:" + area);
        scan.close();
    }

    public static double area(int n, double side) {
        return (n * Math.pow(side, 2)) / (4 * Math.tan(Math.PI / n));
    }
}

结果:

Demo80 递归解决斐波那契数列

package Exer2;

import java.util.Scanner;

public class Demo80 {
    /*
    递归解决斐波那契数列
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入项数:");
        int n = scan.nextInt();
        System.out.println(fibonacci(n));
        scan.close();
    }

    private static int fibonacci(int n) {
        if (n == 0) {
            return 0;
        }
        if (n == 1) {
            return 1;
        }
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

结果:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Golang_HZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值