目录
Demo51 (十进制到八进制)编写程序,提示用户输人一个十进制整数,然后显示对应的八进制值。在这个程序中不要使用Java的Interger.to0ctalString(int)方法。
Demo52 (最大数的出现次数)编写程序读取整数,找出它们的最大数,然后计算该数的出现次数。
Demo54 可以通过询问朋友5个问题,找到他出生在一个月的哪一天。每个问题都询问生日是否是5个数字集合中的一个。
Demo56 (几何:五边形的面积)编写程序,提示用户输入从五边形中心到顶点的距离,计算五边形的面积,如右图所示。
Demo57 (几何:正多边形的面积)编写一个程序,提示用户输入边的个数以及正多边形的边长,然后显示它的面积。
Demo58 (给出ASCII码对应的字符)编写一个程序,得到一个ASCII码的输入(0~~127之间的一个整数),然后显示该字符。
Demo59 (十进制转十六进制)编写一个程序,提示用户输入0~15之间的一个整数,显示其对应的十六进制数。
Demo60 (检测子串)编写一个程序,提示用户输人两个字符串,检测第二个字符串是否是第一个字符串的子串。
这里我使用了循环和递归两种方式:
- 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;
- }
- }
结果:

假设输入是以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;
- }
- }
结果:


生日是出现这一天的每个集合的第一个数字的和。例如:如果生日是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();
- }
- }
结果:

- 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;
- }
- }
结果:

计算五边形面积的公式为:面积 = (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;
- }
- }
结果:

正多边形是一个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));
- }
- }
结果:

下面是一个运行示例:

- 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);
- }
- }
结果:

下面是一个运行示例:

此出仅为显示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();
- }
- }
结果:


- 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 + "的" + "字串");
- }
- }
- }
结果:

