【程序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
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
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
if(isPrime(i))
System.out.print(i+" ");
}
}
//求素数
private static boolean isPrime(int n){
boolean flag = true;
for(int i=2;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
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
for(int i=0;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
for(int j=0;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
int min = A[i];
for(int j=i+1;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
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[k] = A[k-1];
break;
}
return B;
}
}