java的基础程序加讲解_50道JAVA基础编程练习题系列讲解之(三)

【程序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;

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值