【程序21】
题目:求1+2!+3!+...+20!的和
程序分析:此程序只是把累加变成了累乘。
public class Prog21{ public static void main(String[] args){ long sum = 0; for(int i=0;i<20;i++) sum += factorial(i+1); System.out.println(sum); } //阶乘 private static long factorial(int n){ int mult = 1; for(int i=1;i<n+1;i++) mult *= i; return mult; } } |
【程序22】
题目:利用递归方法求5!。
程序分析:递归公式:fn=fn_1*4!
public class Prog22{ public static void main(String[] args){ System.out.println(fact(10)); } //递归求阶乘 private static long fact(int n){ if(n==1) return 1; else return fact(n-1)*n; } } |
【程序23】
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
public class Prog23{ public static void main(String[] args){ System.out.println(getAge(5,2)); } //求第m位同志的年龄 private static int getAge(int m,int n){ if(m==1) return 10; else return getAge(m-1,n)+n; } } |
【程序24】
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
public class Prog24{ public static void main(String[] args){ int n = Integer.parseInt(args[0]); int i = 0; int[] a = new int[5]; do{ a[i] = n%10; n /= 10; ++i; }while(n!=0); System.out.print("这是一个"+i+"位数,从个位起,各位数字依次为:"); for(int j=0;j<i;j++) System.out.print(a[j]+" "); } } |
【程序25】
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
import java.io.*; public class Prog25{ public static void main(String[] args){ int n = 0; System.out.print("请输入一个5位数:"); BufferedReader bufin = new BufferedReader(new InputStreamReader(System.in)); try{ n = Integer.parseInt(bufin.readLine()); }catch(IOException e){ e.printStackTrace(); }finally{ try{ bufin.close(); }catch(IOException e){ e.printStackTrace(); } } palin(n); } private static void palin(int n){ int m = n; int[] a = new int[5]; if(n<10000 || n>99999){ System.out.println("输入的不是5位数!"); return; }else{ for(int i=0;i<5;i++){ a[i] = n%10; n /= 10; } if(a[0]==a[4] && a[1]==a[3]) System.out.println(m+"是一个回文数"); else System.out.println(m+"不是回文数"); } } } |
【程序26】
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
import java.io.*; public class Prog26{ public static void main(String[] args){ String str = new String(); BufferedReader bufIn = new BufferedReader(new InputStreamReader(System.in)); System.out.print("请输入星期的英文单词前两至四个字母):"); try{ str = bufIn.readLine(); }catch(IOException e){ e.printStackTrace(); }finally{ try{ bufIn.close(); }catch(IOException e){ e.printStackTrace(); } } week(str); } private static void week(String str){ int n = -1; if(str.trim().equalsIgnoreCase("Mo") || str.trim().equalsIgnoreCase("Mon") || str.trim().equalsIgnoreCase("Mond")) n = 1; if(str.trim().equalsIgnoreCase("Tu") || str.trim().equalsIgnoreCase("Tue") || str.trim().equalsIgnoreCase("Tues")) n = 2; if(str.trim().equalsIgnoreCase("We") || str.trim().equalsIgnoreCase("Wed") || str.trim().equalsIgnoreCase("Wedn")) n = 3; if(str.trim().equalsIgnoreCase("Th") || str.trim().equalsIgnoreCase("Thu") || str.trim().equalsIgnoreCase("Thur")) n = 4; if(str.trim().equalsIgnoreCase("Fr") || str.trim().equalsIgnoreCase("Fri") || str.trim().equalsIgnoreCase("Frid")) n = 5; if(str.trim().equalsIgnoreCase("Sa") || str.trim().equalsIgnoreCase("Sat") || str.trim().equalsIgnoreCase("Satu")) n = 2; if(str.trim().equalsIgnoreCase("Su") || str.trim().equalsIgnoreCase("Sun") || str.trim().equalsIgnoreCase("Sund")) n = 0; switch(n){ case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; case 3: System.out.println("星期三"); break; case 4: System.out.println("星期四"); break; case 5: System.out.println("星期五"); break; case 6: System.out.println("星期六"); break; case 0: System.out.println("星期日"); break; default: System.out.println("输入有误!"); break; } } } |
【程序27】
题目:求100之内的素数
public class Prog27{ public static void main(String[] args){ int n = 100; System.out.print(n+"以内的素数:"); for(int i=2;i<n+1;i++){ if(isPrime(i)) System.out.print(i+" "); } } //求素数 private static boolean isPrime(int n){ boolean flag = true; for(int i=2;i<Math.sqrt(n)+1;i++) if(n%i==0){ flag = false; break; } return flag; } } |
【程序28】
题目:对10个数进行排序
程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。
public class Prog28{ public static void main(String[] args){ int[] a = new int[]{31,42,21,50,12,60,81,74,101,93}; for(int i=0;i<10;i++) for(int j=0;j<a.length-i-1;j++) if(a[j]>a[j+1]){ int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } for(int i=0;i<a.length;i++) System.out.print(a[i]+" "); } } |
【程序29】
题目:求一个3*3矩阵对角线元素之和
程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
public class Prog29{ public static void main(String[] args){ int[][] a = new int[][] {{100,2,3,},{4,5,6},{17,8,9}}; matrSum(a); } private static void matrSum(int[][] a){ int sum1 = 0; int sum2 = 0; for(int i=0;i<a.length;i++) for(int j=0;j<a[i].length;j++){ if(i==j) sum1 += a[i][j]; if(j==a.length-i-1) sum2 += a[i][j]; } System.out.println("矩阵对角线之和分别是:"+sum1+"和"+sum2); } } |
【程序30】
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
import java.util.Scanner; public class Prog30{ public static void main(String[] args){ int[] A = new int[]{0,8,7,5,9,1,2,4,3,12}; int[] B = sort(A); print(B); System.out.println(); System.out.print("请输入10个数的数组:"); Scanner scan = new Scanner(System.in); int a = scan.nextInt(); scan.close(); int[] C = insert(a,B); print(C); } //选择排序 private static int[] sort(int[] A){ int[] B = new int[A.length]; for(int i=0;i<A.length-1;i++){ int min = A[i]; for(int j=i+1;j<A.length;j++){ if(min>A[j]){ int temp = min; min = A[j]; A[j] = temp; } B[i] = min; } } B[A.length-1] = A[A.length-1]; return B; } //打印 private static void print(int[] A){ for(int i=0;i<A.length;i++) System.out.print(A[i]+" "); } //插入数字 private static int[] insert(int a,int[] A){ int[] B = new int[A.length+1]; for(int i=A.length-1;i>0;i--) if(a>A[i]){ B[i+1] = a; for(int j=0;j<=i;j++) B[j] = A[j]; for(int k=i+2;k<B.length;k++) B[k] = A[k-1]; break; } return B; } } |