《Java练习题》Java习题集一
编程合集: https://www.cnblogs.com/jssj/p/12002760.html
Java总结:https://www.cnblogs.com/jssj/p/11146205.html
【程序1】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
import java.util.Scanner; /** * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? * 分析 一月 1对, 2月 1对,3月 2对,4月 3对,5月5对,6月8对,7月13对,8月 21只 */ public class Subject1 { public static void main(String[] args) { System.out.print("请输入你想知道的兔子数量的月份:"); Scanner scanner=new Scanner(System.in); int n=scanner.nextInt();//获取输入的整数 System.out.println(test(n)); System.out.println(fun(n)); scanner.close(); } /** * 菜鸟写法 * @param i * @return */ public static int test(int i){ int tot = 0; int a = 0; int b = 1; for(int j = 0;j<i; j++){ tot = a+b; a = b; b = tot; } return a; } /** * 大神写法 * @param * @return */ private static int fun(int n){ if(n==1 ||n==2) return 1; else return fun(n-1)+fun(n-2); } }
运行结果:
【程序2】
题目:判断101-200之间有多少个素数,并输出所有素数。
/**
* 【程序2】
* 题目:判断101-200之间有多少个素数,并输出所有素数。
*
* 分析:什么是素数,不能被自己和1整除的数。
*/
public class Subject2 {
public static void main(String[] args) {
getPrimeNumber(101,200);
}
/**
* 判断a和b之间有多少个素数
* @param a
* @param b
*/
public static void getPrimeNumber(int a,int b){
int sum = 0;
if(a >= b){
System.out.println("a不能大于等于b!");
}
System.out.print("素数:");
for(int i=a;i<=b;i++){
if(isPrimeNumber(i)){
sum += 1;
System.out.print(i+" ");
}
}
System.out.println();
System.out.println("存在素数数量:"+sum);
}
/**
* 判断num是否是一个素数
* @param i
* @return
*/
private static boolean isPrimeNumber(int i) {
boolean flag = true;
for(int j=2;j <= i/2;j++){
if(i%j == 0){
flag = false;
break;
}
}
return flag;
}
}
运行结果:
【程序3】
题目:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
/*** * 【程序3】 * 题目:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 */ public class Subject3 { public static void main(String[] args) { for(int i= 100 ; i<=999;i++){ if(isNarcissus(i)){ System.out.println("水仙花数:"+i); } } } public static boolean isNarcissus(int a){ int num1 = 0; //个位 int num2 = 0; //十位 int num3 = 0; //百位 num3 = a/100; num2 = (a - num3*100)/10; num1 = a - num3*100 - num2*10; if(Math.pow(num1,3) + Math.pow(num2,3) + Math.pow(num3,3) ==a){ return true; } return false; } }
运行结果:
【程序4】
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
/** * 【程序4】 * 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 */ public class Subject4 { public static void main(String[] args) { System.out.print("请输入需要分解因数的整数:"); Scanner scanner=new Scanner(System.in); int a = scanner.nextInt();//获取输入的整数 decompose(a); } /** * 分解质因数 * @param num * @return */ public static void decompose(int num){ int tmp = num/2; for(int i=2;i <= tmp ;i++){ if(num%i == 0){ num = num/i; System.out.println("质因数为:"+i); i=1; continue; } } } }
运行结果:
【程序5】
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
/** * 【程序5】 * 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 */ public class Subject5 { public static void main(String[] args) { System.out.println("请输入学生成绩:"); Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); String result = a>=90? "A" : (60<=a && a<90? "B" :"C"); System.out.println("该学生的最终评级为:"+result); } }
运行结果:
【程序6】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
import java.util.Scanner; /** * 【程序6】 * 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 */ public class Subject6 { public static void main(String[] args) { System.out.println("请输入第一个正整数:"); Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); System.out.println("请输入第二个正整数:"); int b = scanner.nextInt(); int maxCommonDivisor = maxCommonDivisor(a,b); System.out.println("最大公约数:"+ maxCommonDivisor); int minCommonMultiple = (a*b)/maxCommonDivisor; System.out.println("最小公倍数:"+ minCommonMultiple); scanner.close(); } /** * 获取num1和num2的最大公约数 * @param num1 * @param num2 * @return */ public static int maxCommonDivisor(int num1,int num2){ int result = 1; int tmp = num1>num2? num2 :num1; for (int i = 2; i <= tmp; i++) { if(num1%i == 0 && num2%i == 0){ result = i*result; num1 = num1/i; num2 = num2/i; i=1; } } return result; } }
运行结果:
【程序7】
题目:输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。
import java.util.Scanner; /** * 【程序7】 * 题目:输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。 */ public class Subject7 { public static void main(String[] args) { System.out.println("请输入字符串:" ); Scanner scanner=new Scanner(System.in); scanner.useDelimiter("\n"); String tmpStr = scanner.next(); classify(tmpStr); } public static void classify(String str){ char[] strArr = str.toCharArray(); int num1 = 0; //字母 String num1Str = ""; int num2 = 0; //数字 String num2Str = ""; int space = 0; //空格 String spaceStr = ""; int other = 0; //其他 String otherStr = ""; for (int i = 0; i < strArr.length ; i++) { int ascii = (int)strArr[i]; if( 48<= ascii && ascii <= 57){ num2 = num2 + 1; num2Str = num2Str +strArr[i] +" "; }else if(ascii == 32){ space = space +1; }else if((65<= ascii && ascii <= 90) || (97 <= ascii && ascii <= 122)){ num1 = num1 + 1; num1Str = num1Str +strArr[i] +" "; }else{ other = other + 1; otherStr = otherStr +strArr[i] +" "; } } System.out.println("存在字母个数:" + num1); System.out.println("存在字母如下:" + num1Str); System.out.println("存在数字个数:" + num2); System.out.println("存在数字如下:" + num2Str); System.out.println("存在空格个数:" + space); System.out.println("存在其他个数:" + other); System.out.println("存在其他如下:" + otherStr); } }
运行结果:
【程序8】
题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。输出结果的形式如:2+22+222=246;
import java.math.BigDecimal; import java.util.Scanner; /** * 【程序8】 * 题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。输出结果的形式如:2+22+222=246; */ public class Subject8 { public static void main(String[] args) { System.out.println("请输入数字1(小于10):" ); Scanner scanner=new Scanner(System.in); int a = scanner.nextInt(); System.out.println("请输入数字2(1-10):" ); int b = scanner.nextInt(); sum(a,b); } /** * 求和 * @param num1 * @param num2 */ public static void sum(int num1,int num2) { String numStr = ""; String result = ""; BigDecimal bigDecimal = new BigDecimal("0"); for(int i=0;i< num1; i++ ){ numStr = numStr+num2; if(i==0){ result = result+numStr; }else{ result = result+"+"+numStr; } bigDecimal = bigDecimal.add(new BigDecimal(numStr)); } result = result +"=" +bigDecimal.toString(); System.out.println("结果:"+result); } }
运行结果:
【程序9】
题目:一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。
import java.util.ArrayList; import java.util.List; /*** * 【程序9】 * 题目:一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。 */ public class Subject9 { public static void main(String[] args) { for (int i = 0; i <1000 ; i++) { perfectNum(i); } } /** * 判断是否是完数 */ public static void perfectNum(int num){ List<Integer> list = decompose(num); int sum = 0; for(int i :list){ sum = sum + i; } if(num == sum && num != 1){ System.out.println("完数:"+num); } } /** * 分解质因数 * @param num * @return */ public static List decompose(int num){ List<Integer> list = new ArrayList(); list.add(1); int tmp = num/2; for(int i=2;i <= tmp ;i++){ if(num%i == 0){ list.add(i); continue; } } return list; } }
运行结果:
【程序10】
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;n次落地经过路线总长度和下次反弹的高度。
import java.util.Scanner; /** * 【程序10】 * 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;n次落地经过路线总长度和下次反弹的高度。 */ public class Subject10 { public static void main(String[] args) { System.out.println("请选择第几次落地:"); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); sumLength(n); } public static void sumLength(int n){ double height = 100; double sumLength = 0; for(int i=1; i<=n; i++){ if(i==1){ sumLength = sumLength + height; }else{ sumLength = sumLength + height*2; } height = height/2; } System.out.println("总运动距离为:"+sumLength); System.out.println("反弹高度为:"+height); } }
运行结果:
参考:https://blog.csdn.net/zzzzzzzhu/article/details/82355001