Java编程练习题Demo51-Demo60

目录

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

Demo52 (最大数的出现次数)编写程序读取整数,找出它们的最大数,然后计算该数的出现次数。

Demo54 可以通过询问朋友5个问题,找到他出生在一个月的哪一天。每个问题都询问生日是否是5个数字集合中的一个。

Demo55 十六进制记数系统有16个数字:0~9,A~F。字母A、B、C、D、E和F对应于十进制数字10、11、12、13、14和15。我们现在写一个程序,提示用户输入一个十六进制数字,显示它对应的十进制数。

Demo56 (几何:五边形的面积)编写程序,提示用户输入从五边形中心到顶点的距离,计算五边形的面积,如右图所示。

Demo57 (几何:正多边形的面积)编写一个程序,提示用户输入边的个数以及正多边形的边长,然后显示它的面积。

Demo58 (给出ASCII码对应的字符)编写一个程序,得到一个ASCII码的输入(0~~127之间的一个整数),然后显示该字符。

Demo59 (十进制转十六进制)编写一个程序,提示用户输入0~15之间的一个整数,显示其对应的十六进制数。

Demo60 (检测子串)编写一个程序,提示用户输人两个字符串,检测第二个字符串是否是第一个字符串的子串。


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

这里我使用了循环和递归两种方式:

package Exer;

import java.util.Scanner;

public class Demo51 {
    /*
    (十进制到八进制)编写程序,提示用户输人一个十进制整数,然后显示对应的八进制值。
    在这个程序中不要使用Java的Integer.toOctalString(int)方法。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入一个整数:");
        int num = scan.nextInt();
        // System.out.println(Integer.toOctalString(num));
        System.out.println(toOctal(num));
        System.out.println(toOctal1(num));
    }

    /*
    44
    5   4  ==> 54
     */
    private static String toOctal(int num) {
        StringBuilder s = new StringBuilder();
        while (num / 8 > 0) {
            s.insert(0, num % 8);
            num /= 8;
        }
        s.insert(0, num);
        return s.toString();
    }

    private static String toOctal1(int num) {
        if (num < 8) {
            return num + "";
        }
        return toOctal(num / 8) + num % 8;
    }
}

结果:

Demo52 (最大数的出现次数)编写程序读取整数,找出它们的最大数,然后计算该数的出现次数。

       假设输入是以0结束的。假定输入是3 5 2 5 5 5 0,程序找出最大数5,而5出现的次数是4。提示:维护max和count两个变量。max存储当前最大数,而count存储它的出现次数。初始状态时,将第一个数赋值给max而将count赋值为1。然后将接下来的每个数字逐个地和max进行比陵。如果这个数大于max,就将它赋值给max,同时将count重置为1。如果这个数等于max,就给count 加1。

 

package Exer;

import java.util.Scanner;

public class Demo52 {
    /*
    Demo52 (最大数的出现次数)编写程序读取整数,找出它们的最大数,然后计算该数的出现次数。
    假设输入是以0结束的。假定输入是3 5 2 5 5 5 0,程序找出最大数5,而5出现的次数是4。
    提示:维护max和count两个变量。max存储当前最大数,而count存储它的出现次数。
    初始状态时,将第一个数赋值给max而将count赋值为1。然后将接下来的每个数字逐个地和max进行比陵。
    如果这个数大于max,就将它赋值给max,同时将count重置为1。如果这个数等于max,就给count 加1。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入一系列整数(输入0结束):");
        int max = scan.nextInt();
        int count = 1;
        while (true) {
            int num2 = scan.nextInt();
            if (num2 != 0) {
                if (max < num2) {
                    max = num2;
                    count = 1;
                } else if (max == num2) {
                    count++;
                }
            } else {
                break;
            }
        }
        System.out.println(max);
        System.out.println(count);
    }
}

结果:

Demo53 可以使用数学方法求解许多计算问题。比如,给定一个三角形的三条边,可以通过以下公式计算角度。

package Exer;

import java.util.Scanner;

public class Demo53 {
    /*
    可以使用数学方法求解许多计算问题。比如,给定一个三角形的三条边,可以通过以下公式计算角度。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入三角形的三条边:");
        double a = scan.nextInt();
        double b = scan.nextInt();
        double c = scan.nextInt();
        double A = countAngle(a, b, c);
        double B = countAngle(b, a, c);
        double C = countAngle(c, b, a);
        // System.out.println(String.format("A角%f, B角%f, C角%f", A, B, C));
        System.out.printf("A角%.2f, B角%.2f, C角%.2f%n", A, B, C);
    }

    private static double countAngle(double a, double b, double c) {
        double angle = 0;
        angle = Math.toDegrees(Math.acos((a * a - b * b - c * c) / (-2 * b * c)));
        return angle;
    }
}

结果:

Demo54 可以通过询问朋友5个问题,找到他出生在一个月的哪一天。每个问题都询问生日是否是5个数字集合中的一个。

生日是出现这一天的每个集合的第一个数字的和。例如:如果生日是19,那么它会出现在集合1、集合2和集合5中。这三个集合的第一个数字分别是1、2和16。它们的和就是19。

package Exer;

import java.util.Scanner;

public class Demo54 {
    /*
    可以通过询问朋友5个问题,找到他出生在一个月的哪一天。每个问题都询问生日是否是5个数字集合中的一个。
    生日是出现这一天的每个集合的第一个数字的和。例如:如果生日是19,那么它会出现在集合1、集合2和集合5中。
    这三个集合的第一个数字分别是1、2和16。它们的和就是19。
     */
    public static void main(String[] args) {
        String set1 = " 1  3  5  7\n" + " 9 11 13 15\n"
                + "17 19 21 23\n" + "25 27 29 31";
        String set2 = " 2  3  6  7\n" + "10 11 14 15\n"
                + "18 19 22 23\n" + "26 27 30 31";
        String set3 = " 4  5  6  7\n" + "12 13 14 15\n"
                + "20 21 22 23\n" + "28 29 30 31";
        String set4 = " 8  9 10 11\n" + "12 13 14 15\n"
                + "24 25 26 27\n" + "28 29 30 31";
        String set5 = "16 17 18 19\n" + "20 21 22 23\n"
                + "24 25 26 27\n" + "28 29 30 31";
        System.out.println("集合1:\n" + set1);
        System.out.println("集合2:\n" + set2);
        System.out.println("集合3:\n" + set3);
        System.out.println("集合4:\n" + set4);
        System.out.println("集合5:\n" + set5);
        guessBirth();
    }

    private static void guessBirth() {
        Scanner scan = new Scanner(System.in);
        int birth = 0;
        for (int i = 1; i <= 5; i++){
            System.out.printf("生日是否是数字集合%d中的一个(请回答是或否):", i);
            String answer = scan.next();
            if (answer.equals("是")) {
                birth += Math.pow(2, i-1);
            }
        }
        System.out.println("生日是:" + birth);
        scan.close();
    }
}

结果:

Demo55 十六进制记数系统有16个数字:0~9,A~F。字母A、B、C、D、E和F对应于十进制数字10、11、12、13、14和15。我们现在写一个程序,提示用户输入一个十六进制数字,显示它对应的十进制数。

package Exer;

import java.util.Scanner;

public class Demo55 {
    /*
    Demo55. 十六进制记数系统有16个数字:0~9,A~F。
    字母A、B、C、D、E和F对应于十进制数字10、11、12、13、14和15。
    我们现在写一个程序,提示用户输入一个十六进制数字,显示它对应的十进制数。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个十六进制数字:");
        String hex = scan.next();
        int decimal = hexToDecimal(hex);
        System.out.println(decimal);
    }

    /*
    A1
    A*16^1 + 1*16^0 = 161
     */
    private static int hexToDecimal(String hex) {
        int decimal = 0;
        int j = 0; // 位数-1
        for (int i = hex.length() - 1; i >= 0; i--) {
            if (hex.charAt(i) <= '9') {
                decimal += (hex.charAt(i) - '1' + 1) * (int) (Math.pow(16, j++));
            } else {
                decimal += (hex.charAt(i) - 'A' + 10) * (int) (Math.pow(16, j++));
            }
        }
        return decimal;
    }
}

结果:

Demo56 (几何:五边形的面积)编写程序,提示用户输入从五边形中心到顶点的距离,计算五边形的面积,如右图所示。

计算五边形面积的公式为:面积 = (5 × s²) / (4 × tan(π / 5)),其中s是边长。边长可以使用公式s = 2r sin(π / 5) 计算,其中r是从五边形中心到顶点的距离。结果保留小数点后两位数字。下面是一个运行示例:

package Exer;

import java.util.Scanner;

public class Demo56 {
    /*
    Demo56 (几何:五边形的面积)编写程序,提示用户输入从五边形中心到顶点的距离,计算五边形的面积,如右图所示。
    计算五边形面积的公式为:面积 = (5 × s²) / (4 × tan(π / 5)),其中s是边长。
    边长可以使用公式s = 2r sin(π / 5) 计算,其中r是从五边形中心到顶点的距离。
    结果保留小数点后两位数字。下面是一个运行示例:
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入从五边形中心到顶点的距离:");
        double r = scan.nextDouble();
        double area = opentagonArea(r);
        System.out.println(area);
    }

    private static double opentagonArea(double r) {
        double area;
        double s = 2 * r * Math.sin(Math.PI / 5);
        area = (5 * Math.pow(s, 2)) / (4 * Math.tan(Math.PI / 5));
        return area;
    }
}

结果:

Demo57 (几何:正多边形的面积)编写一个程序,提示用户输入边的个数以及正多边形的边长,然后显示它的面积。

正多边形是一个n条边的多边形,它每条边的长度都相等,而且所有角的度数也相等(即多边形既等边又等角)。计算正多边形面积的公式是:面积 = (n × s²) / (4 × tan(π / n)) 这里,s是边长。这里是一个运行示例:

import java.util.Scanner;

public class Demo57 {
    /*
    Demo57. (几何:正多边形的面积)编写一个程序,提示用户输入边的个数以及正多边形的边长,然后显示它的面积。
    正多边形是一个n条边的多边形,它每条边的长度都相等,而且所有角的度数也相等(即多边形既等边又等角)。
    计算正多边形面积的公式是:面积 = (n × s²) / (4 × tan(π / n)) 这里,s是边长。这里是一个运行示例:
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入多边形边的个数:");
        double n = scan.nextDouble();
        System.out.println("正多边形的边长:");
        double s = scan.nextDouble();
        double area = polygonArea(n, s);
        System.out.println(area);
    }

    private static double polygonArea(double n, double s) {
        return (n * Math.pow(s, 2)) / (4 * Math.tan(Math.PI / n));
    }
}

结果:

Demo58 (给出ASCII码对应的字符)编写一个程序,得到一个ASCII码的输入(0~~127之间的一个整数),然后显示该字符。

下面是一个运行示例:

package Exer;

import java.util.Scanner;

public class Demo58 {
    /*
    (给出ASCII码对应的字符)编写一个程序,得到一个ASCII码的输入(0~~127之间的一个整数),然后显示该字符。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个0~127之间的整数:");
        int num = scan.nextInt();
        asciiToChar(num);
        scan.close();
    }

    private static void asciiToChar(int num) {
        System.out.println((char) num);
    }
}

结果:

Demo59 (十进制转十六进制)编写一个程序,提示用户输入0~15之间的一个整数,显示其对应的十六进制数。

下面是一个运行示例:

 此出仅为显示0-15之间的数字的十六进制,任意整数的十进制数转换十六进制,请参考:Java编程练习题Demo33-Demo40_不会敲代码的HZ的博客-CSDN博客

import java.util.Scanner;

public class Demo59 {
    /*
    (十进制转十六进制)编写一个程序,提示用户输入0~15之间的一个整数,显示其对应的十六进制数。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入一个0~15之间的整数:");
        int num = scan.nextInt();
        if (num < 0 || num > 15) {
            System.out.println(num + " 是一个无效输入");
        }else if (num < 10) {
            System.out.println("十六进制值为:" + num);
        }else {
            System.out.println("十六进制值为:" + (char)(num - 10 + 'A'));
        }
        scan.close();
    }
}

结果:

Demo60 (检测子串)编写一个程序,提示用户输人两个字符串,检测第二个字符串是否是第一个字符串的子串。

import java.util.Scanner;

public class Demo60 {
    /*
    Demo60. (检测子串)编写一个程序,提示用户输人两个字符串,检测第二个字符串是否是第一个字符串的子串。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入第一个字符串:");
        String s1 = scan.next();
        System.out.print("请输入第二个字符串:");
        String s2 = scan.next();
        judgeStringSub(s1, s2);
    }

    private static void judgeStringSub(String s1, String s2) {
        String maxStr = s1.length() > s2.length() ? s1: s2;
        String minStr = s1.length() < s2.length() ? s1: s2;
        // boolean isFlag = true;
        int j = 0;
        for (int i = 0; i <= maxStr.length(); i++) {
            if (i > maxStr.length() - minStr.length() && j == 0) {
                break;
            }
            if (j < minStr.length() && minStr.charAt(j) == maxStr.charAt(i)) {
                j++;
            }else if (j < minStr.length() && minStr.charAt(j) != maxStr.charAt(i)) {
                j = 0;
            }
        }
        if (j == minStr.length()) {
            System.out.println(minStr + "是" + maxStr + "的" + "字串");
        } else {
            System.out.println(minStr + "不是" + maxStr + "的" + "字串");
        }
    }
}

结果:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不会敲代码的HZ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值