Java基础题50(持续更新)

2021/9/6 14:07:15

本文主要是介绍Java基础题50(持续更新),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

1、兔子繁殖问题

2、101-200之间的素数

3、水仙花

4、正整数分解成质因数

4、简化版本(原网址:https://blog.csdn.net/Purnell/article/details/78209757)

5、给成绩分等级

6、最大公约数和公倍数

7、字符统计

8、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字

9、完数

10、球落地反弹

11、1~4组成3位数

12、利润提成

13、完全平方数

14、根据日期判断是这年的哪一天

15、3个整数比较大小

16、乘法表

17、猴子吃桃子

18、比赛名单

19、菱形

20、分数相加(后面运行数度很慢,数值很大)

1、兔子繁殖问题

package woniu.java50;

import java.util.Scanner;

/*Java50例题
 * 1、兔子繁殖问题--斐波那契数列
 * 条件:1对兔子出生第3个月后开始繁殖,2月后一月一次1对,不死
 * 分析兔子的对数呈现为:1、1、2、3、5、8、13、21*/
public class T_1_tuzi {	
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入兔子繁殖的时间(单位:月,类型整数):");
		int month = scanner.nextInt();
		while (month <= 0) {
			System.out.println("输入不合法,请重新输入:");
			month = scanner.nextInt();
		}
		int pre = fanzhi(month);
		System.out.println(month+"个月后,兔子的对数为:"+pre+"对");
		scanner.close();
	}

	private static int fanzhi(int month) {
		// TODO Auto-generated method stub
		int pre_1=1,pre_2=1;
		int pre_n = 0;
		if (month ==1 || month ==2) {
			pre_n = 1;
		}else {
			for (int i = 3; i <= month; i++) {
				pre_n = pre_1+pre_2;
				pre_1 = pre_2;
				pre_2 = pre_n;
			}
		}
		return pre_n;
	}
}

2、101-200之间的素数

package woniu.java50;

/*判断101-200之间有多少个素数,并输出所有素数
 *素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数
 * */
public class T_2_shusu {
	
	public static void main(String[] args) {
		int s=0;//素数个数
		for (int i = 101; i < 201; i++) {
			int k = 0;
			int data[] = new int[30];//定义一个数组,长度为20
//			判断素数并存入数组
			for (int j = 1; j <= i; j++) {								
				if (i%j == 0) {
					while (true) {
						data[k] = j;
						k++;
//						跳出while循环
						break;
					}
				}
			}
//			查看数组元素
/*
 * System.out.println(i+"的因数数组为:"); for (int j = 0; j < k; j++)
 * System.out.print(data[j]+" "); System.out.println();
 */
//			判断素数
			if (k == 2) {
				System.out.println(i+"是素数");
				s++;
//				查看因数数组
				/*
				 * for (int j = 0; j < k; j++) System.out.print(data[j]+" ");
				 * System.out.println();
				 */		
			}
		}
		System.out.println("101--200之间一共有"+s+"个素数");
	}
}

3、水仙花

package woniu.java50;
/**
 * 3、打印水仙花数
 * @author 26307
 *水仙花数:3位数,其每一位数的立方和等于其本身
 *范围:100-999
 */
public class T_3_shuixianhuashu {
	
	public static void main(String[] args) {
		for (int i = 100; i < 1000; i++) {
			panduan(i);
		}
	}
	
	private static void panduan(int num) {
		// TODO Auto-generated method stub
		int bai = num/100; //百位数
		int shi = num/10%10; //十位数
		int ge = num%10; //个位数
		if (num == bai*bai*bai + shi*shi*shi + ge*ge*ge) {
			System.out.println(num+"是水仙花数!");
		}
	}
}

4、正整数分解成质因数

package woniu.java50;

import java.util.Scanner;

/**
 * 将一个正整数分解质因数
 * @author 26307
 *eg:90=2*3*3*5
 *条件:
 *1、可以被整除,除数是素数
 *2、循环除,直到成为一个素数
 *素数:只有1和本身两个因子
 *不是:奇数1、偶数(2除外)
 *
 */
public class T_4_zhishu {
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一个正整数:");
		int num = scanner.nextInt();
		int a = num;
		while (num < 0) {
			System.err.println("您输入的是负数,请重新输入一个正整数:");
			num = scanner.nextInt();
			a = num;
		}
		int[] arr = new int[11];
		int key = 0;
		for (int i = 2; i <= num; i++) {
			if (num%i==0 && sushu(i)) {
				num = num/i;
				arr[key] = i;
				key++;
				i = 1;
			}
		}
//		输入的整数为1或者为素数
		if (a==1 || sushu(a)) {
			System.out.println(a+" = "+ a + " * "+" 1 ");
//			退出程序
			System.exit(0);
		}
//		规范输出
		System.out.print(a+" = ");
		for (int i = 0; i < key; i++) {
//			输出前面的质因数
			if (i< key-1) {
				System.out.print(arr[i]+" * ");
//				结束当前循环进入下次循环
				continue;
			}
//			最后一个质因数
			if (i == key-1) {
				System.out.print(arr[i]);
			}
		}
		scanner.close();
	}
	
//	判断素数
	@SuppressWarnings("unused")
	public static boolean sushu(int num) {
		// TODO Auto-generated method stub	
		if (num==2 ) {
//			System.out.println(num+"是素数!");
			return true;
//			排除偶数和1(素数必须>0)
		}else if (num%2==0 || num < 2) {
//			System.out.println(num+"不是素数!");
			return false;
		}else {
//			定理: 如果n不是素数, 则n有满足1< d<=sqrt(n)的一个因子d.
//          证明: 如果n不是素数, 则由定义n有一个因子d满足1< d< n.	
			for (int i = 3; i*i <= num; i += 2) {
//				i+=2:排除偶数
				if (num%i == 0) {
//					System.out.println(num+"不是素数!");
					return false;
				}
//				System.out.println(num+"是素数!");
				return true;
			}
		}
//		System.out.println(num+"是素数!");
		return true;
	}
}

4、简化版本(原网址:https://blog.csdn.net/Purnell/article/details/78209757)

package woniu.java50;
/**
 * 不用考虑素数,在方法f中已经规避了对素数的判定
 */
import java.util.Scanner;

public class T_4_primeNum {
	
	public static int f(int n) {
		for (int i = 2; i < n; i++) {
			if (n%i==0 && n!=i) {
				System.out.print(i+" * ");
				return f(n/i);
			}
		}
		System.out.print(n);
		return n;
	}
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一个正整数:");
		int n = scanner.nextInt();
		System.out.print(n+" = ");
		f(n);
		scanner.close();
	}
}

5、给成绩分等级

package woniu.java50;

import java.util.Scanner;

/**
 * 给输入的成绩分等级
 * @author 26307
 *A:>=90
 *B:89-60
 *C:<60
 *Java默认整除
 */
public class T_5_score {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入您的分数(0~100):");
		int score = scanner.nextInt();
		while (score>100 || score<0) {
			System.err.println("输入错误,请重新输入百分制的分数:");
			score = scanner.nextInt();
		}
		switch (score/30) {
		case 1:
		case 0:
			System.out.println("您的等级是C");
			break;
		case 2:
			System.out.println("您的等级是B");
			break;
		case 3:
			System.out.println("您的等级是D");
			break;
		default:
			break;
		}
		scanner.close();
	}
}

6、最大公约数和公倍数

package woniu.java50;

import java.util.Scanner;

/**
 * 输入两个正整数找到他们最大公约数和最小公倍数
 * @author 26307
 *公约数:整除两个整数的最大正整数common divisor
 *公倍数:2个整数的共有倍数(第一个可以整除两个整数的正整数)Common multiple
 */
public class T_6_mathBeiUYue {
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入两个整数:");
		int a = scanner.nextInt();
		int b = scanner.nextInt();
		while (a<=0 || b<=0) {
			if (a<=0) {
				System.err.println("第一个数输入错误,请重新输入一个正整数:");
				a = scanner.nextInt();
			}
			if (b<=0) {
				System.err.println("第二个数输入错误,请重新输入一个正整数:");
				b = scanner.nextInt();
			}
		}
		int min = commonMultipleMin(a, b);
		int max = commonDivisorMax(a, b);
		System.out.println(a+"和"+b+"的最小公倍数是:"+min+",最大公约数是:"+max);
		scanner.close();
	}
	
//最小公倍数Common multiple
	public static int commonMultipleMin(int a,int b) {
		int max = a>b?a:b;
		int min = max;
		for (int i = max; i <= a*b; i++) {
			if (i%a==0 && i%b==0) {
				min = i;
				break;
			}
		}
		return min;
	}
	
//	最大公约数common divisor
	public static int commonDivisorMax(int a,int b) {
		int min = a<b?a:b;
		int max = 1;
		for (int i = 2; i < min; i++) {
			if (a%i==0 && b%i==0) {
				max = max>i?max:i;
			}
		}
		return max;
	}
}

7、字符统计

package woniu.java50;

import java.util.Scanner;

/*统计字符个数
 * 描述:输出一行字符,分别统计其英文字母、空格、数字和其他字符的个数
 * charAt():
 * */
public class T_7_characterStatistical {
//	函数中的void表示return返回的数据类型,其中void表示空
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一行字符串,回车结束输入:");
		String str = scanner.nextLine();
		tongji(str);
		scanner.close();
	}
	private static void tongji(String str) {
		int china = 0;
		int english = 0;
		int number = 0;
		int blank = 0;
		int other = 0;
		for (int i = 0; i < str.length(); i++) {
//			缓存字符
			char ch = str.charAt(i);
//			Unicode表中:中文基础范围:'\u4E00'--'\u9FA5
			if (ch >= '\u4E00' && ch <= '\u9FA5') {
				china++;
			}
//			统计英文字母
			else if (ch >= 'a' && ch <= 'z'||ch >= 'A' && ch <= 'Z') {
				english++;
//			数字
			}else if (ch >= '0' && ch <= '9') {
				number++;
//			空格,ASCII码为32
			}else if (ch == ' ') {
				blank++;
//			其他
			}else {
				other++;
			}
		}
		System.out.println("中文字符有:"+china+"个,英文字母有:"+english+"个,数字有:"+number+"个,空格有:"+blank+"个,其他字符有:"+other+"个");
		return;	
	}
}

8、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字

package woniu.java50;

import java.util.Scanner;

/**
 * 求解:s = a + aa + aaa + aaaa + aaaaa + ???
 * 加多少由用户设定
 * @author 26307
 *
 */
public class T_8_sum5 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一个整数(1-9):");
		int num = scanner.nextInt();
		while (num <= 0 || num > 9 ) {
			System.err.println("第一个数输入错误,请重新输入1-9内的一个整数:");
			num = scanner.nextInt();
		}
		System.out.println("请输入需要相加的数的最大位数(不超过9):");
		int n = scanner.nextInt();
		while ( n<= 0 || n>9) {
			System.err.println("第二个数输入错误,请重新输入1-9内的一个整数:");
			n = scanner.nextInt();
		}
		System.out.println(sum(num,n));
		scanner.close();
	}
	
	public static int sum(int a,int b) {
		int s = 0;
		int result = 0;
		System.out.print("s = ");
		for (int i = 0; i < b; i++) {
			s = s * 10 + a;
			result += s;
			if (i<b-1) {
				System.out.print(s+" + ");
				continue;
			}
			System.out.println(s);
			System.out.print("  = ");
		}
		return result;
	}
}

随机版

package woniu.java50;

import MyShortcuts.Random;

/**
 * 求解:s = a + aa + aaa + aaaa + aaaaa + ???
 * 加多少由随机设定
 * @author 26307
 *
 */
public class T_8_randomSum {
	
	public static void main(String[] args) {
		int num = Random.randomNuber(1, 9);
		System.out.println("初始数据是:"+num);
		int n = Random.randomNuber(1, 9);
		System.out.println("最大位数是:"+n);
		System.out.println(sum(num,n));
	}
	
	public static int sum(int a,int b) {
		int s = 0;
		int result = 0;
		System.out.print("s = ");
		for (int i = 0; i < b; i++) {
			s = s * 10 + a;
			result += s;
			if (i<b-1) {
				System.out.print(s+" + ");
				continue;
			}
			System.out.println(s);
			System.out.print("  = ");
		}
		return result;
	}
}

随机函数

package MyShortcuts;
/**
 * 随机生成指定范围的一个随机整数
 * @author 26307
 *
 */
public class Random {
//	随机一个数在指定范围内[a,b],a<b
//	调用eg : Random.randomNuber(11, 30)
	public static int randomNuber (int a,int b) {
//		向上取整:范围会变小,即[a,b]-->[a+1,b]
//		向下取整
		int num = (int)Math.floor(Math.random()*(b-a+1)+a); 
		return num;
	}
}

9、完数

package woniu.java50;
/**
 *描述:
 *一个数如果恰好等于它的因子之和,这个数就称为”完数”。
 *例如6=1+2+3.编程 找出1000以内的所有完数
 * @author 26307
 *求因子:可以整除
 *求和:数组长度未知,相加,求和
 */
public class T_9_wanMeiShu {

	public static void main(String[] args) {
		for (int i = 1; i < 1000; i++) {
			if (i == sum(yinzi(i))) {
				show(i, yinzi(i));
			}
		}
	}
//	求因子
	public static int[] yinzi(int a) {
//		1000以内因子最多的是840,有32个因子(包含840)
		int[] arr = new int[31];
		int k = 0;
		for (int i = 1; i < a; i++) {
//			数组未赋值时存储的数据是0
			if (a%i==0) {
				arr[k] = i;
				k++;
			}
		}
		return arr;
	}
//	求和
	public static int sum(int[] a) {
		int s = 0;
		for (int i = 0; i < a.length; i++) {
			if (a[i]==0) {
				break;
			}
			s += a[i];
		}
		return s;
	}
//	输出因子
	public static void show(int a,int[] b) {
		System.out.print(a+" = ");
		for (int i = 0; i < b.length; i++) {
			if (b[i+1]==0) {
				System.out.print(b[i]);
				break;
			}
//			if (i!=0 && i%6==0) {
//				System.out.println();
//				System.out.print("   ");
//			}
			System.out.print(b[i]+" + ");
		}
		System.out.println();
	}
}

10、球落地反弹

package woniu.java50;

import java.util.Scanner;

/**题目描述:
 * 一球从100米高度自由落下,每次落地后反跳回原高度的一半;
 * 再落下,求它在 第10次落地时,共经过多少米?
 * 第10次反弹多高?
 * @author 26307
 * 解决思路:
 * 1、h = h * 0.5,float
 * 2、函数调用本身
 */
public class T_10_qiuFanTan {
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入初始高度(单位:米,>=1):");
		float h = scanner.nextFloat();
		while (h < 1.0F) {
			System.err.println("输入错误,请重新输入初始高度(单位:米,>1):");
			h = scanner.nextFloat();
		}
		System.out.println("请输入反弹次数(>=1):");
		int n = scanner.nextInt();
		while (n < 1) {
			System.err.println("输入错误,请重新输入弹跳次数:");
			n = scanner.nextInt();
		}
		System.out.println("初始高度为"+h+"米时,第"+n+"次反弹高度是:"+tanQiu(h, n)+"米");
		scanner.close();
	}
//	弹球
	public static float tanQiu(float h,int n) {
		h = h/2.0F;
		n--;
//		System.out.println("n="+n+", h="+h);
//		省略for循环
		if (n>0) {
			return tanQiu(h, n);
		}else {
			return h;
		}
	}
}

11、1~4组成3位数

package woniu.java50;
/**题目:
 * 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
 * 都是多少?
 * 
 * @author 26307
 *解析:
 *4个数字1-4,3位数:3层for循环
 */
public class T_11_numberZuHe {

	public static void main(String[] args) {
		int n = 1;
		for (int i = 1; i < 5; i++) {
			for (int j = 1; j < 5; j++) {
				for (int j2 = 1; j2 < 5; j2++) {
					if (i==j || i==j2 || j==j2) {
						continue;
					}else {
						System.out.println("第"+n+"个三位数是:"+i+j+j2);
						n++;
					}
				}
			}
		}
	}
}

12、利润提成

package woniu.java50;

import java.util.Scanner;

/**题目:
 * 企业发放的奖金根据利润提成。利润(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%提成,
 * 从键盘输入当月利润I,求应发放奖金总数?
 * 
 * @author 26307
 *解析:
 *1、用户输入利润
 *2、根据利润判断得到奖金
 *利润提成区间
 *1、lr<=10w     0.1     lr*0.1  1
 *2  10w<lr<=20W 0.075  (lr-10)*0.075+1  1+0.75
 *3  20W<lr<=40w 0.05   (lr-20)*0.05+1.75 1.75+1
 *4  40W<lr<=60w 0.03   (lr-40)*0.03+2.75 2.75+0.6
 *5  60W<lr<=100w 0.015   (lr-60)*0.015+3.35 3.35+0.6
 *6  100W<lr  0.01   (lr-100)*0.01+3.95 
 *拓展:
 *利润精确到6位小数
 */
public class T_12_tiChen {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入本月利润(单位:万元):");
		float lr = scanner.nextFloat();
		while (lr<=0F) {
			System.err.println("利润不能为负数,请重新输入(单位:万元):");
			lr = scanner.nextFloat();
		}
		System.out.println("本月利润为"+lr+"万元,应发奖金"+tc(lr)+"万元");
		scanner.close();
	}
//	提成
	public static float tc(Float lr) {
		float jiangJin = 0F;
//		100W<lr  0.01   (lr-100)*0.01+3.95 
		if (lr>100F) {
			jiangJin = (lr-100F) * 0.01F + 3.95F;
		}
//		60W<lr<=100w 0.015   (lr-60)*0.015+3.35 3.35+0.6
		if (lr>60F) {
			jiangJin = (lr-60F)*0.015F+3.35F;
		}
//		40W<lr<=60w 0.03   (lr-40)*0.03+2.75 2.75+0.6
		if (lr>40F) {
			jiangJin = (lr-40F)*0.03F+2.75F;
		}
//		20W<lr<=40w 0.05   (lr-20)*0.05+1.75 1.75+1
		if (lr>20F) {
			jiangJin = (lr-20F)*0.05F+1.75F;
		}
//		10w<lr<=20W 0.075  (lr-10)*0.075+1  1+0.75
		if (lr>10F) {
			jiangJin = (lr-10F)*0.075F+1F;
		}
//		lr<=10w     0.1     lr*0.1  1
		if (lr<10F) {
			jiangJin = lr * 0.1F;
		}
		return jiangJin;
	}
}

13、完全平方数

package woniu.java50;
/**题目:
 * 一个整数,它加上100后是一个完全平方数,
 * 再加上168又是一个完全平方数,请问该数是多少?
 * @author 26307
 *解析:
 *使用数学方法:math.sqrt()开平方
 *回答:在int类型范围类只有3个满足该条件的数,即:21 261 1581
 */
public class T_13_sqrt {

	public static void main(String[] args) {
		int number = 1;
//		死循环,结束条件:得到三个满足条件的数
		for (int i = 1;; i++) {
			if (number > 3) {
//				程序停止
				System.exit(0);
			}
			if (isSqrt(i)) {
				System.out.println("第"+number+"个满足条件的数是:"+i);
				number++;
			}
		}
	}
	
	public static boolean isSqrt(int n) {
		boolean result = false;
		int n1 = n+100;
		int n2 = n+268;
		int x = (int)Math.sqrt(n1);
		int y = (int)Math.sqrt(n2);
		if (x*x == n1 && y*y == n2) {
			result = true;
		}
		return result;
	}		
}

14、根据日期判断是这年的哪一天

package woniu.java50;

import java.util.Scanner;

/**
 * 题目:输入某年某月某日,判断这一天是这一年的第几天?
 * @author 26307
 * 分析:
 * 闰年:366天  2月29天
 * 平年:365天  2月28天
 * 31天: 1 3 5 7 8 10 12
 * 30天: 4 6 9 11
 * 函数:
 * 1、判断闰年
 *  1)可以被4,但是不能被100整除
 *  2)可以被400整除
 * 2、得到天数
 */
public class T_14_timeYearMonthDay {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入年份:");
		int year = scanner.nextInt();
		System.out.println("请输入月份:");
		int mouth = scanner.nextInt();
		System.out.println("请输入号数:");
		int day = scanner.nextInt();
		int dayNumber = dayNumber(year, mouth, day);
		System.out.println(year+"年"+mouth+"月"+day+"日是"+year+"年200的第"+dayNumber+"天");
		scanner.close();
	}
//	判断闰年:
	public static boolean runYear(int year) {
		boolean result = false;
		if ((year%4==0 && year%100!=0) || year%400==0) {
			result = true;
			System.out.println(year+"是闰年");
		}else {
			System.out.println(year+"不是闰年");
		}
		return result;
	}
//	得到天数
	public static int dayNumber(int year, int mouth,int day) {
		int number = 0;
		if (runYear(year) && mouth>2) {
			number++;
		}
		switch (mouth) {
		case 1:
			number += day;
			break;
		case 2:
			number += day+31;
			break;
		case 3:
			number += day+31+28;
			break;
		case 4:
			number += day+31+28+31;
			break;
		case 5:
			number += day+31+28+31+30;
			break;
		case 6:
			number += day+31+28+31+30+31;
			break;
		case 7:
			number += day+31+28+31+30+31+30;
			break;
		case 8:
			number += day+31+28+31+30+31+30+31;
			break;
		case 9:
			number += day+31+28+31+30+31+30+31+31;
			break;
		case 10:
			number += day+31+28+31+30+31+30+31+31+30;
			break;
		case 11:
			number += day+31+28+31+30+31+30+31+31+30+31;
			break;
		case 12:
			number += day+31+28+31+30+31+30+31+31+30+31+30;
			break;
		default:
			break;
		}
		return number;
	}
}

15、3个整数比较大小

package woniu.java50;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 题目:输入三个整数x,y,z,请把这三个数由小到大输出。
 * @author 26307
 *
 */
public class T_15_shuZiDaXiao {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int[] arr = new int[3];
//		System.out.println("请输入3个整数(空格相隔,回车结束):");
//		arr[0] = scanner.nextInt();
//		arr[1] = scanner.nextInt();
//		arr[2] = scanner.nextInt();
		for (int i = 0; i < arr.length; i++) {
			System.out.println("请输入第"+(i+1)+"个整数");
			arr[i] = scanner.nextInt();
		}
		int[] arr2 = paiXu(arr);
		System.out.println(Arrays.toString(arr2));
		scanner.close();
	}
//	排序
	public static int[] paiXu(int[] arr) {
//		比较轮数
		for (int i = 0; i < arr.length-1; i++) {
//			比较,升序
			for (int j = 0; j < arr.length-i-1; j++) {
				if (arr[j] > arr[j+1]) {
					int max = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = max;
				}
			}
		}
		return arr;
	}
}

16、乘法表

package woniu.java50;
/**
 * 输出9*9口诀
 * @author 26307
 *
 */
public class T_16_99chengFa {
	public static void main(String[] args) {
		for (int i = 1; i < 10; i++) {
			for (int j = 1; j < i+1; j++) {
				System.out.print(i+" * "+j+" = "+(i*j));
				System.out.print("  ");
			}
			System.out.println();
		}
	}
}

17、猴子吃桃子

package woniu.java50;
/**题目:
 * 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,
 * 还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,
 * 又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
 * 到第10天早上想再吃时,见只剩下一个桃子了。
 * 求第一天共摘了多少。
 * @author 26307
 * 分析:
 * 10天剩下1个
 * 9:(1+1)*2 = n
 * 。。。:(n+1)*2
 */
public class T_17_houZiChiTao {

	public static void main(String[] args) {
		int n = 1;
		for (int i = 10; i > 0; i--) {
			System.out.println("第"+i+"天桃子数量为:"+n);
			n = (n+1)*2;
		}
	}
}

18、比赛名单

package woniu.java50;

/**
 * 题目描述;
 * 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。
 * 已抽签决定比赛名单。有人向队员打听比赛的名单。
 * a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
 * @author 26307
 *分析;
 *使用数组进行分组
 *条件:a不和x比赛,c不和x\z比赛-即c只能和y比赛-a、b不能和y比赛
 *
 *分析结果:a-z c-y b-x
 */
public class T_18_abcPKxyz {

	public static void main(String[] args) {
		String[] A = {"a","b","c"};
		String[] B = {"x","y","z"};
		String[][] pk = new String[3][2];
		for (int i = 0; i < A.length; i++) {
			for (int j = 0; j < B.length; j++) {
				if ((A[i] =="a" && B[j] == "x") || (A[i] =="a" && B[j] == "y")) {
					continue;
				}else if ((A[i] == "c" && B[j]=="x") || (A[i] == "c" && B[j]=="z")) {
					continue;
				}else if ((A[i] =="b" && B[j] == pk[0][1])||(A[i] =="b" && B[j] == "y")) {
					continue;
				}else {
					pk[i][0] = A[i];
					pk[i][1] = B[j];
				}
			}
		}
		System.out.println("比赛名单:");
		for (int i = 0; i < pk.length; i++) {
			System.out.println("第"+(i+1)+"组:"+pk[i][0]+" pk "+pk[i][1]);
		}
	}
}

19、菱形

package woniu.java50;

import java.util.Scanner;

/**
 * 题目:打印菱形
 * @author 26307
 *分析:菱形
 *行数h必须为奇数,列数l由行数决定
 *最大列数l=h
 *中间行:zh = h/2 +1(整除)
 *1<= h <= zh,即中间行以上:l = 2*h -1
 *hmax>= h >= zh,即中间行以下:l = 2*(h-2(h-zh))-1=2(2*zh-h)-1
 */
public class T_19_lingxing {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int h = 1;
		System.out.println("请输入菱形的对角线长度:(默认为1)");
		h = scanner.nextInt();
		while (h<1 || h%2 == 0) {
			System.err.println("输入错误!对角线长度必须为大于0的奇数,请重新输入:");
			h = scanner.nextInt();
		}
		System.out.println("---------打印菱形-----------");
		lingXing(h);
		scanner.close();
	}
	
	private static void lingXing(int h) {
		int zh = h/2 +1;
		for (int i = 0; i <= h; i++) {
			if (i <= zh) {
				for (int j = 0; j < zh-i; j++) {
					System.out.print("  ");
				}
				for (int j = 0; j < 2*i-1; j++) {
					System.out.print(" *");
				}
			}else {
				for (int j = 0; j < i-zh; j++) {
					System.out.print("  ");
				}
				for (int j = 0; j < 2*(2*zh-i)-1; j++) {
					System.out.print(" *");
				}
			}
			System.out.println();
		}
	}
}

20、分数相加(后面运行数度很慢,数值很大)

package woniu.java50;

import java.util.Arrays;

/**
 * 题目:
 * 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
 * @author 26307
 *分析:
 *分子:2 3 5 8 13 *** :规律:从第三个数开始,一个数等于前两个数之和
 *分母:1 2 3 5 8 **** :规律:从第三个数开始,一个数等于前两个数之和
 *困难:分数相加   数值越界:int--long--double
 *解决:2个分子相加,在和第三个分子相加
 *
 *后面数字较大,加到第11个分数已经达到10位数
 */
public class T_20_fenShuJiaFa {

	public static void main(String[] args) {
		int[] a = new int[20];
		int[] b = new int[20];
		a = guiLv(2,3);
		b = guiLv(1,2);
		System.out.println("分子:"+Arrays.toString(a)+",长度"+a.length);
		System.out.println("分母:"+Arrays.toString(b)+",长度"+b.length);
		long[] result = new long[2];
		result = addFenShu((long)a[0], a[1], (long)b[0], b[1]);
		for (int i = 2; i < a.length; i++) {
			result = addFenShu(result[0], a[i], result[1], b[i]);
			System.out.println("前"+(i+1)+"个分数相加结果:"+result[0]+"/"+result[1]);
		}
//		System.out.println(result[0]+"/"+result[1]);
	}
	
//	分数相加 分子a,分母b
	private static long[] addFenShu(Long a1,int a2,Long b1,int b2) {
		long[] arr = new long[2];
//		找到公倍数
		long gbs = minGBS(b1, b2);
//		找到各自的倍数
		long c1 = gbs/b1;
		long c2 = gbs/b2;
//		相加的分子
		long a3 = a1*c1+a2*c2;
//		化简
		long gys = maxGYS(a3, gbs);
		arr[0] = a3/gys;
		arr[1] = gbs/gys;
		return arr;
	}
	
//	找最小公倍数
	private static long minGBS(Long a,int b) {
		long c = 0;
		long max = a>b?a:b;
		long min = a<b?a:b;
		for (int i = 1; i <= min ; i++) {
			if ((max*i)%min != 0) {
				continue;
			}else {
				c = max*i;
				break;
			}
		}
		return c;
	}
	
//	找最大公因数
	private static long maxGYS(long a,Long b) {
		long c = 1;
		long min = a<b?a:b;
		for (long i = min; i > 0 ; i--) {
			if (a%i==0 && b%i==0) {
				c = i;
				break;
			}else {
				continue;
			}
		}
		return c;
	}

//	规律数组
	private static int[] guiLv(int a,int b) {
		// TODO Auto-generated method stub
		int[] array1 = new int[20];
		array1[0] = a;
		array1[1] = b;
		for (int i = 2; i < 20; i++) {
			array1[i] = array1[i-1] + array1[i-2]; 
		}
		return array1;
	}
}

21、阶乘求和



这篇关于Java基础题50(持续更新)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程