每天10道编程题-第三天
【程序21】 题目:求1+2!+3!+...+20!的和
【程序22】 题目:利用递归方法求5!。
【程序23】 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
【程序24】 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
【程序25】 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
【程序26】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
【程序27】 题目:求100之内的素数
【程序28】 题目:对10个数进行排序
【程序29】 题目:求一个3*3矩阵对角线元素之和
【程序30】 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
详细如下:
【程序21】 题目:求1+2!+3!+...+20!的和
1 package com.daliu.suanfa3; 2 3 /** 4 * 【程序21】 题目:求1+2!+3!+...+20!的和 5 * 6 */ 7 public class Ex21 { 8 static long sum = 0; 9 static long fac = 0; 10 11 public static void main(String[] args) { 12 long sum = 0; 13 long fac = 1; 14 for (int i = 1; i <= 10; i++) { 15 fac = fac * i; 16 sum += fac; 17 } 18 System.out.println(sum); 19 } 20 }
【程序22】 题目:利用递归方法求5!。
1 package com.daliu.suanfa3; 2 3 import java.util.Scanner; 4 5 /** 6 * 【程序22】 题目:利用递归方法求5!。 7 * 8 * @author Administrator 9 * 10 */ 11 public class Ex22 { 12 public static void main(String[] args) { 13 Scanner s = new Scanner(System.in); 14 int n = s.nextInt(); 15 System.out.println(recursion(n)); 16 17 } 18 19 public static long recursion(int n) { 20 long value = 0; 21 if (n == 1 || n == 0) { 22 value = 1; 23 } else if (n > 1) { 24 value = n * recursion(n - 1); 25 } 26 return value; 27 } 28 29 }
【程序23】 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
1 package com.daliu.suanfa3; 2 3 /** 4 * 【程序23】 5 * 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人 6 * ,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? 7 * 1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。 8 * 9 */ 10 public class Ex23 { 11 12 static int getAge(int n) { 13 if (n == 1) { 14 return 10; 15 } 16 return 2 + getAge(n - 1); 17 } 18 19 public static void main(String[] args) { 20 System.out.println("第五个的年龄为:" + getAge(5)); 21 } 22 }
【程序24】 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
1 package com.daliu.suanfa3; 2 3 import java.util.Scanner; 4 5 /** 6 * 【程序24】 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 7 * 8 */ 9 public class Ex24 { 10 public static void main(String[] args) { 11 Ex24 tn = new Ex24(); 12 Scanner s = new Scanner(System.in); 13 long a = s.nextLong(); 14 if (a < 0 || a > 100000) { 15 System.out.println("Error Input, please run this program Again"); 16 System.exit(0); 17 } 18 if (a >= 0 && a <= 9) { 19 System.out.println(a + "是一位数"); 20 System.out.println("按逆序输出是" + '\n' + a); 21 } else if (a >= 10 && a <= 99) { 22 System.out.println(a + "是二位数"); 23 System.out.println("按逆序输出是"); 24 tn.converse(a); 25 } else if (a >= 100 && a <= 999) { 26 System.out.println(a + "是三位数"); 27 System.out.println("按逆序输出是"); 28 tn.converse(a); 29 } else if (a >= 1000 && a <= 9999) { 30 System.out.println(a + "是四位数"); 31 System.out.println("按逆序输出是"); 32 tn.converse(a); 33 } else if (a >= 10000 && a <= 99999) { 34 System.out.println(a + "是五位数"); 35 System.out.println("按逆序输出是"); 36 tn.converse(a); 37 } 38 } 39 40 public void converse(long l) { 41 String s = Long.toString(l); 42 char[] ch = s.toCharArray(); 43 for (int i = ch.length - 1; i >= 0; i--) { 44 System.out.print(ch[i]); 45 } 46 } 47 }
【程序25】 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
1 package com.daliu.suanfa3; 2 3 import java.util.Scanner; 4 /** 5 * 【程序25】 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 6 * 7 */ 8 public class Ex25 { 9 static int[] a = new int[5]; 10 static int[] b = new int[5]; 11 12 public static void main(String[] args) { 13 boolean is = false; 14 Scanner s = new Scanner(System.in); 15 long l = s.nextLong(); 16 if (l > 99999 || l < 10000) { 17 System.out.println("Input error, please input again!"); 18 l = s.nextLong(); 19 } 20 for (int i = 4; i >= 0; i--) { 21 a[i] = (int) (l / (long) Math.pow(10, i)); 22 l = (l % (long) Math.pow(10, i)); 23 } 24 System.out.println(); 25 for (int i = 0, j = 0; i < 5; i++, j++) { 26 b[j] = a[i]; 27 } 28 for (int i = 0, j = 4; i < 5; i++, j--) { 29 if (a[i] != b[j]) { 30 is = false; 31 break; 32 } else { 33 is = true; 34 } 35 } 36 if (is == false) { 37 System.out.println("is not a Palindrom!"); 38 } else if (is == true) { 39 System.out.println("is a Palindrom!"); 40 } 41 } 42 }
【程序26】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
1 package com.daliu.suanfa3; 2 3 import java.util.Scanner; 4 /** 5 * 【程序26】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样, 6 * 则继续 判断第二个字母。 7 * 8 */ 9 public class Ex26 { 10 public static void main(String[] args) { 11 // 保存用户输入的第二个字母 12 char weekSecond; 13 // 将Scanner类示例化为input对象,用于接收用户输入 14 Scanner input = new Scanner(System.in); 15 // 开始提示并接收用户控制台输入 16 System.out.print("请输入星期值英文的第一个字母,我来帮您判断是星期几:"); 17 String letter = input.next(); 18 // 判断用户控制台输入字符串长度是否是一个字母 19 if (letter.length() == 1) { 20 // 利用取第一个索引位的字符来实现让Scanner接收char类型输入 21 char weekFirst = letter.charAt(0); 22 switch (weekFirst) { 23 case 'm': 24 // 当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能 25 case 'M': 26 System.out.println("星期一(Monday)"); 27 break; 28 case 't': 29 // 当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能 30 case 'T': 31 System.out 32 .print("由于星期二(Tuesday)与星期四(Thursday)均以字母T开头,故需输入第二个字母才能正确判断:"); 33 letter = input.next(); 34 // 判断用户控制台输入字符串长度是否是一个字母 35 if (letter.length() == 1) { 36 // 利用取第一个索引位的字符来实现让Scanner接收char类型输入 37 weekSecond = letter.charAt(0); 38 // 利用或(||)运算符来实现忽略用户控制台输入大小写敏感的功能 39 if (weekSecond == 'U' || weekSecond == 'u') { 40 System.out.println("星期二(Tuesday)"); 41 break; 42 // 利用或(||)运算符来实现忽略用户控制台输入大小写敏感的功能 43 } else if (weekSecond == 'H' || weekSecond == 'h') { 44 System.out.println("星期四(Thursday)"); 45 break; 46 // 控制台错误提示 47 } else { 48 System.out.println("输入错误,不能识别的星期值第二个字母,程序结束!"); 49 break; 50 } 51 } else { 52 // 控制台错误提示 53 System.out.println("输入错误,只能输入一个字母,程序结束!"); 54 break; 55 } 56 case 'w': 57 // 当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能 58 case 'W': 59 System.out.println("星期三(Wednesday)"); 60 break; 61 case 'f': 62 // 当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能 63 case 'F': 64 System.out.println("星期五(Friday)"); 65 break; 66 case 's': 67 // 当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能 68 case 'S': 69 System.out 70 .print("由于星期六(Saturday)与星期日(Sunday)均以字母S开头,故需输入第二个字母才能正确判断:"); 71 letter = input.next(); 72 // 判断用户控制台输入字符串长度是否是一个字母 73 if (letter.length() == 1) { 74 // 利用取第一个索引位的字符来实现让Scanner接收char类型输入 75 weekSecond = letter.charAt(0); 76 // 利用或(||)运算符来实现忽略用户控制台输入大小写敏感的功能 77 if (weekSecond == 'A' || weekSecond == 'a') { 78 System.out.println("星期六(Saturday)"); 79 break; 80 // 利用或(||)运算符来实现忽略用户控制台输入大小写敏感的功能 81 } else if (weekSecond == 'U' || weekSecond == 'u') { 82 System.out.println("星期日(Sunday)"); 83 break; 84 // 控制台错误提示 85 } else { 86 System.out.println("输入错误,不能识别的星期值第二个字母,程序结束!"); 87 break; 88 } 89 } else { 90 // 控制台错误提示 91 System.out.println("输入错误,只能输入一个字母,程序结束!"); 92 break; 93 } 94 default: 95 // 控制台错误提示 96 System.out.println("输入错误,不能识别的星期值第一个字母,程序结束!"); 97 break; 98 } 99 } else { 100 // 控制台错误提示 101 System.out.println("输入错误,只能输入一个字母,程序结束!"); 102 } 103 } 104 }
【程序27】 题目:求100之内的素数
1 package com.daliu.suanfa3; 2 /** 3 * 【程序27】 题目:求100之内的素数 4 * 5 */ 6 public class Ex27 { 7 public static void main(String args[]) { 8 int sum, i; 9 for (sum = 2; sum <= 100; sum++) { 10 for (i = 2; i <= sum / 2; i++) { 11 if (sum % i == 0) 12 break; 13 } 14 if (i > sum / 2) 15 System.out.println(sum + "是素数"); 16 } 17 } 18 }
【程序28】 题目:对10个数进行排序
1 package com.daliu.suanfa3; 2 3 import java.util.Arrays; 4 import java.util.Random; 5 import java.util.Scanner; 6 /** 7 * 【程序28】 题目:对10个数进行排序 8 * @author Administrator 9 * 10 */ 11 12 public class Ex28 { 13 public static void main(String[] args) { 14 int arr[] = new int[11]; 15 Random r = new Random(); 16 for (int i = 0; i < 10; i++) { 17 arr[i] = r.nextInt(100) + 1;// 得到10个100以内的整数 18 } 19 Arrays.sort(arr); 20 for (int i = 0; i < arr.length; i++) { 21 System.out.print(arr[i] + "\t"); 22 } 23 System.out.print("\nPlease Input a int number: "); 24 Scanner sc = new Scanner(System.in); 25 arr[10] = sc.nextInt();// 输入一个int值 26 Arrays.sort(arr); 27 for (int i = 0; i < arr.length; i++) { 28 System.out.print(arr[i] + "\t"); 29 } 30 } 31 }
【程序29】 题目:求一个3*3矩阵对角线元素之和
1 package com.daliu.suanfa3; 2 /** 3 * 【程序29】 题目:求一个3*3矩阵对角线元素之和 4 * @author Administrator 5 * 6 */ 7 public class Ex29 { 8 public static void main(String[] args) { 9 double sum = 0; 10 int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 7, 8 } }; 11 for (int i = 0; i < 3; i++) 12 for (int j = 0; j < 3; j++) { 13 if (i == j) 14 sum = sum + array[i][j]; 15 } 16 System.out.println(sum); 17 } 18 }
【程序30】 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
1 package com.daliu.suanfa3; 2 3 import java.util.Random; 4 /** 5 * 【程序30】 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 6 * 7 */ 8 public class Ex30 { 9 public static void main(String[] args) { 10 int temp = 0; 11 int myarr[] = new int[12]; 12 Random r = new Random(); 13 for (int i = 1; i <= 10; i++) 14 myarr[i] = r.nextInt(1000); 15 for (int k = 1; k <= 10; k++) 16 System.out.print(myarr[k] + ","); 17 for (int i = 1; i <= 9; i++) 18 for (int k = i + 1; k <= 10; k++) 19 if (myarr[i] > myarr[k]) { 20 temp = myarr[i]; 21 myarr[i] = myarr[k]; 22 myarr[k] = temp; 23 } 24 System.out.println(""); 25 for (int k = 1; k <= 10; k++) 26 System.out.print(myarr[k] + ","); 27 28 myarr[11] = r.nextInt(1000); 29 for (int k = 1; k <= 10; k++) 30 if (myarr[k] > myarr[11]) { 31 temp = myarr[11]; 32 for (int j = 11; j >= k + 1; j--) 33 myarr[j] = myarr[j - 1]; 34 myarr[k] = temp; 35 } 36 System.out.println(""); 37 for (int k = 1; k <= 11; k++) 38 System.out.print(myarr[k] + ","); 39 } 40 }