程序设计经典算法50题java版1-25题

2018年1月13日16:19:09 发表评论 150 views

【程序1】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

public class java01 {
	public static void main(String[] args){
		int mouth = 12;
		int mount[]  = new int[mouth+1];
		for(int i=1;i<=mouth;i++){
			if(i==1){
				mount[i] = 1;
			}else{
				mount[i] = mount[i-1] + mount[i-2];
			}
		}
		for (int i =1 ; i <= mount.length-1; i++) {
			System.out.println(i + "月:" + mount[i]); 
		}
	}
}

【程序2】
题目:判断101-200之间有多少个素数,并输出所有素数。

public class java02 {
	public static void main(String[] args){
		int i,j;
		for( i=101;i<=200;i++){
			for( j=2;j<i/2;j++){
				if(i%j==0){
					j=1;
					break;
				}
			}
			if(j!=1){
				System.out.println(i);
			}
		}
	}
}

【程序3】
题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。

public class java03 {
	public static void main(String[] args){
		//3位的
		int one,ten,hundred;
		for(int i=100;i<=999;i++){
			one = i%10%10;
			ten = i/10%10;
			hundred = i/100;
			if(i==one*one*one+ten*ten*ten+hundred*hundred*hundred){
				System.out.println(i);
			}
		}
	}

}

【程序4】
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

public class java04 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(new BufferedInputStream(System.in));
		int n = sc.nextInt();
		int i = 2;
		System.out.print(n + "=");
		while (n > i) {
			if (n % i == 0) {
				System.out.print(i + "*");
				n /= i;
			} else {
				i++;
			}
		}
		System.out.println(n);
	}
}

 【程序5】
题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

public class java05 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		if (a > 90) {
			System.out.println("A");
		}else if(a>60 && a<90){
			System.out.println("B");
		}else{
			System.out.println("C");
		}
	}
}

 【程序6】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,
取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,
返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。

public class java06 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(new BufferedInputStream(System.in));
		int m = sc.nextInt(),n = sc.nextInt(),c=1;
		int a = m ,b = n;
		if(m<n){
			c = m;
			m = n;
			n = c;
		}
		while(c != 0){
			c = m%n;
			m = n;
			n = c;
		}
		System.out.println("最大公约数" + m);
		System.out.println("最小公倍数" + (a*b/m));
	}
}

 【程序7】
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
Character
isDigit(char ch)
确定指定字符是否为数字。
isLetter(char ch)
确定指定字符是否为字母。
isSpaceChar(char ch)
确定指定字符是否为 Unicode 空白字符。

public class java07 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(new BufferedInputStream(System.in));
		String str = sc.nextLine();
		char s[] = str.toCharArray();
		int digit=0,letter=0,space=0,rests=0;
		for(int i=0;i<s.length;i++){
			if(Character.isLetter(s[i])){
				letter++;
			}else if(Character.isDigit(s[i])){
				digit++;
			}else if(Character.isSpaceChar(s[i])){
				space++;
			}else{
				rests++;
			}
		}
		System.out.println("字母" + letter + "个");
		System.out.println("数字" + digit + "个");
		System.out.println("空格" + space + "个");
		System.out.println("其他字符" + rests + "个");
	}

}

 【程序8】
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

public class java08 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		//输出a
		int a = sc.nextInt();
		//输入次数
		int n = sc.nextInt();
		int sum = 0 ;
		int shu = a ;
		System.out.print("s=" + a);
		for(int i =1 ;i<n;i++){
			shu=shu*10+a;
			sum=sum+shu;
			System.out.print("+" + shu);
		}
		System.out.println("\n" +"和是"+(sum+a));
		
	}
}

 【程序9】
题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。

public class java09 {
	public static void main(String[] args) {
		int num=0;
		for(int x=1;x<=1000;x++){
			num=0;
			for (int i = 1; i <= x / 2; i++) {
				num += i;
				if (x == num) {
					System.out.println(x + "是一个完数");
				}
			}
		}
	}

}

 【程序10】
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?

public class java10 {
	public static void main(String[] args) {
		double l=100,h=0,s=0;
		for(int i=1;i<=10;i++){
			h = l/2;
			s = s + l+h;
			l = h;
		}
		System.out.printf(" 第10次落地时,共经%.3f过米\n",(s-l));
		System.out.printf("第10次反弹%.3f高\n",l);
	}

}

【程序11】
题目:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

public class java11 {
	public static void main(String[] args) {
		for(int a=1;a<=4;a++){
			for(int b=1;b<=4;b++){
				for(int c=1;c<=4;c++){
					if(a!=b&&a!=c&&b!=c){
						System.out.println(""+a+b+c);
					}
				}
			}
		}
	}
}

【程序12】
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,
从键盘输入当月利润,求应发放奖金总数?

public class java12 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("输入利润");
		int pice = sc.nextInt();
		double sum = 0;
		if(pice <= 100000){
			sum = pice * 1.1;
		}else if(pice > 100000 && pice <= 200000){
			sum = 100000 * 0.1 + (pice - 100000)* 0.075 + pice;
		}else if(pice > 200000 && pice <= 400000){
			sum = 100000 * (0.1 + 0.075)+(pice - 200000) * 0.5 + pice;
		}else if(pice > 400000 && pice <= 600000){
			sum = (100000 * (0.1 + 0.75) + 200000 * 0.05) + (pice - 400000) * 0.03 + pice;
		}else if(pice > 600000 && pice <= 1000000){
			sum = (100000 * (0.1 + 0.75) + 200000 * (0.05 + 0.03)) + (pice - 600000) * 0.015 + pice;
		}else{
			sum = (100000 * (0.1 + 0.75) + 200000 * (0.05 + 0.03) + 400000 * 0.015) + (pice - 1000000) * 0.01 + pice;
		}
		System.out.println("sum:" + sum);
	}

}

【程序13】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

public class java13 {
	public static void main(String[] args) {
		for(int i=1;i<10000;i++){
			if(Math.sqrt(i+100)%1==0&&Math.sqrt(i+268)%1==0){
				System.out.println(i);
			}
		}
	}
}

【程序14】
题目:输入某年某月某日,判断这一天是这一年的第几天?

public class java14 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("输入年份");
		int year = sc.nextInt();
		System.out.println("输入月份");
		int mouth = sc.nextInt();
		System.out.println("输入天数");
		int day = sc.nextInt();
		//定义月份天数
		int[] arrmouth = {31,28,31,30,31,30,
						   31,31,30,31,30,31};
		//判断闰年
		if((year%4==0&&year%100!=0)||(year%400==0)){
			arrmouth[2] = 29;
		}
		int num = 0 ;
		for(int i=0;i<mouth-1;i++){
			num = num + arrmouth[i];
		}
		System.out.println(num+day);
		
	}
}

【程序15】
题目:输入三个整数x,y,z,请把这三个数由小到大输出。

public class java15 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("input:x" );
		int x = sc.nextInt();
		System.out.println("input:y");
		int y = sc.nextInt();
		System.out.println("intput:z");
		int z = sc.nextInt();
		int temp = 0;
		if(x>y){
			temp = x;
			x = y;
			y = temp;
		}
		if(x>z){
			temp = x;
			x = z;
			z = temp;
		}
		if(y>z){
			temp = y;
			y  = z;
			z = temp;
		}
		System.out.println(x + "<" + y + "<" + z );
	}

}

【程序16】
题目:输出9*9口诀。

public class java16 {
	public static void main(String[] args){
		for(int i = 1; i<=9 ;i++){
			for(int j =1 ;j<=i;j++){
				System.out.print(j + "x" + i + "=" + (j*i) + "\t");
			}
			System.out.println();
			
		}
		
	}

}

【程序17】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,
又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

 

public class java17 {
	public static void main(String[] args){
		int sum = 1;
		int day = 10;
		for(int i =0;i<day-1;i++){
			sum = (sum +1)*2;
		}
		System.out.println(sum);
	}
}

【程序18】
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

 

public class java18x {
	public static void main(String[] args) {
		String c="xyz",b="",a="";
		for(int i=0;i<c.length();i++){
			if(new Character(c.charAt(i)).equals('x') || new Character(c.charAt(i)).equals('z')){
				continue;
			}else{
				System.out.println("c vs " + c.charAt(i));
				a = c.replace(new Character(c.charAt(i)).toString(), "");
			}
		}
		for(int i=0;i<a.length();i++){
			if(new Character(a.charAt(i)).equals('x')){
				continue;
			}else{
				System.out.println("a vs " + a.charAt(i));
				b = a.replace(new Character(a.charAt(i)).toString(), "");
			}
		}
		System.out.println("b vs " + b);
	}
}

【程序19】
题目:打印出如下图案(菱形)

public class java19 {
	public static void main(String[] args) {
		int l = 7;
		for(int a =0;a<l/2+1;a++){
			for(int i=a;i<l/2+1;i++){
				System.out.print(" ");
			}
			for(int i=0;i<a*2+1;i++){
				System.out.print("*");
			}
			System.out.println();
		}
		//下半部分
		for(int a = 1;a<l/2+1;a++){
			for(int i = 0;i<=a;i++){
				System.out.print(" ");
			}
			for(int i = l-1;i>a*2-1;i--){
				System.out.print("*");
			}
			System.out.println();
		}

	}
}

【程序20】
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

public class java20 {
	public static void main(String[] args) {
		double a = 1, b = 2;
		double sum = 0;
		for (int i = 1; i < 20; i++) {
			double temp = 0;
			sum = sum + b / a;
			temp = a;
			a = b;
			b = temp + b;

			/*
			 * a=b; b=a+b;
			 */
		}
		System.out.println(sum);
	}
}

【程序21】
题目:求1+2!+3!+...+20!的和

 


public class java21 {
	public static void main(String[] args) {
		long sum = 0;
		long n = 1;
		for(int i =1;i<=20;i++){
			n = n*i;
			sum = sum + n;
		}
		System.out.println(sum);
	}
}

【程序22】
题目:利用递归方法求5!。

public class java22 {
	public static void main(String[] args){
		System.out.println(circle(5));
	}
	private static int circle(int i) {
		if(i == 1) return 1;
		return i*circle(i-1);
	}

}

【程序23】
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。
问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。
问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。
请问第五个人多大?

public class java23 {
	public static void main(String[] args) {
		System.out.println(fun(5));
	}
	private static int fun(int i) {
		if(i==1){
			return 10;
		}else{
			return fun(i-1)+2;
		}
	}
}

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

public class java24 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(new BufferedInputStream(System.in));
		int n = sc.nextInt();
		String str = String.valueOf(n);
		int len = str.length();
		if(len>5){
			return ;
		}else{
			System.out.printf("它是%d位数\n",len);
			char s[] = str.toCharArray();
			for(int i=s.length-1;i>=0;i--){
				System.out.println(s[i]);
			}
		}
		
	}
}

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

public class java25 {
	public static void main(String[] args) {
		int one,ten,hundred,thousand,myreabit;
		for(int i=10000;i<=99999;i++){
			myreabit = i / 10000;
			thousand = i % 10000 / 1000;
			hundred = i % 1000 / 100;
			ten = i % 100 / 10;
			one = i % 10;
			if(one == myreabit&&ten==thousand){
				System.out.println(i);
			}
		}
	}

}

 

 



欢迎来到菜鸟头头的个人博客,下方有我的微信二维码,有兴趣的朋友可以加我好友,咱们一起交流探讨。
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的支付宝红包
  • 支付宝红包扫一扫打赏
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: