Java经典五十道题21-30题

【程序21】 
题目:求1+2!+3!+...+20!的和 
1.程序分析:此程序只是把累加变成了累乘。




【程序22】
题目:利用递归方法求5!。 
1.程序分析:递归公式:fn=fn_1*4!




【程序23】
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? 
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。




【程序24】
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。




【程序25】 
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。




【程序26】
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。 
1.略,懒得写了




【程序27】 
题目:求100之内的素数    前面有判断素数的练习了,不想写了。




【程序28】  
题目:对10个数进行排序 
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第 
二个元素与后8个进行比较,并进行交换。 没意思不写了




【程序29】 
题目:求一个3*3矩阵对角线元素之和 
1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。 




【程序30】
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 
1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数, 

依次后移一个位置。

package javaimprove021;
/*
 * 【程序21】TestJieCheng.java 
题目:求1+2!+3!+...+20!的和 
 */
public class Multiplicative {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int sum=0;
		for(int i=1;i<=20;i++)
		{
			int temp=1;
			for(int j=1;j<=i;j++)
			{
				temp*=j;
			}
			sum+=temp;
		}
		System.out.printf("前20项的阶乘的和为:%d",sum);
	}

}
package javaimprove022;
/*
 * 【程序22】TestJieCheng2.java 
题目:利用递归方法求5!。
 */
public class Multi {
	public int multi(int n)
	{
		if(n==1)
			return 1;
		return n*multi(n-1);
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Multi mu=new Multi();
		System.out.printf("5的阶乘为:%d",mu.multi(5));
	}

}

package javaimprove023;
/*
 * 【程序23】TestAge.java 
题目:有5个人坐在一起,问第五个人多少岁?
他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁
。问第三个人,又说比第2人大两岁。
问第2个人,说比第一个人大两岁。
最后问第一个人,他说是10岁。请问第五个人多大?
问题分析:每个都说差两岁,这样就可以得到递归,递归的结束条件是当年龄为10岁的时候,这是第1个人。
 */
public class Age {
	public int age(int n)
	{
		if(n==1)
			return 10;
		return 2+age(n-1);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Age age=new Age();
		System.out.printf("第五个人的年龄为:%d",age.age(5));

	}

}


package javaimprove024;

import java.util.Scanner;

/*
 * 【程序24】
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
 */
public class Digit {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("请输入一个不多余五位数的正整数:");
		
		Scanner in=new Scanner(System.in);
		int number=in.nextInt();
		//System.out.print(number/10000);
		int n1=number/10000;//最高位
		int n2=number%10000/1000;
		int n3=number%1000/100;
		int n4=number%100/10;
		int n5=number%10;//最低位
		System.out.println(n1!=0?"五位数":
			(n2!=0?"四位数":
				(n3!=0?"三位数":
					(n4!=0?"二位数":"一位数"))));
		System.out.println(n5*10000+n4*1000+n3*100+n2*10+n1);
	}

}
package javaimprove025;

import java.util.Scanner;

/*
 * 【程序25】 HuiWenShu.java 
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
 */
public class Palindrome {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
System.out.println("请输入一个五位数的正整数:");
		
		Scanner in=new Scanner(System.in);
		int number=in.nextInt();
		//System.out.print(number/10000);
		int n1=number/10000;//最高位
		int n2=number%10000/1000;
		int n3=number%1000/100;
		int n4=number%100/10;
		int n5=number%10;//最低位
		if(n5==n1&&n4==n2)
		{
			System.out.println("这个数字是回文数!");
		}else
		{
			System.out.println("这个数不是回文数!");
		}
	}

}
package javaimprove029;

import java.util.Scanner;

/*
 * 【程序29】
题目:求一个3*3矩阵对角线元素之和 
1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
 */
public class Matrix {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("请输入矩阵的大小:");
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		double[][] matrix=new double[n][n];
		double sum=0;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
			{
				matrix[i][j]=in.nextDouble();
				if(i==j)
					sum+=matrix[i][j];
			}
		}
		System.out.println(sum);
	}

}
package javaimprove030;

import java.util.Scanner;

/*
 * 【程序30】 ArraySort.java 
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 
1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数, 
依次后移一个位置。或者用二分法插入,在这里为了能够多次插入而不至于溢出,那么我们采用的笨办法是每次新建一个大1的数组接盘。
 */
public class ArraySort {
	public int[] insert(int[] a,int n)//向数组array插入元素n
	{
		int[] newA=new int[a.length+1];
		for(int i=0;i<a.length;i++)
		{
			if(n<=a[i])
			{
				for(int j=newA.length-1;j>i;j--)
				{
					newA[j]=a[j-1];
				}
				newA[i]=n;
				printA(newA);
				return newA;
			}
			else
			{
				newA[i]=a[i];
			}
		}
		newA[a.length]=n;//插入数组的最后,特殊情况特殊处理
		printA(newA);
		return newA;
	}
	public void printA(int[] A)
	{
		for(int k:A)
		{
			System.out.printf("%d  ",k);
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("请输入数组元素(输入-1表示结束):");
		//在这个小程序里,每输入 一个数就向数组插入进去
		Scanner in=new Scanner(System.in);
		int[] esist=new int[]{1,2,3,4,5};
		int temp=in.nextInt();
		ArraySort sort=new ArraySort();
		while(temp!=0)
		{						
			esist=sort.insert(esist, temp);
			temp=in.nextInt();
		}		
		
	}

}









  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值