本文对50道经典的java程序题进行详细解说,对于初学者可以跳过一些逻辑性太强的题目,比如第一题用到了方法的递归,初学者可能不理解,最好先看那些有if、for、while可以简单解决的程序题!但是,对于比较深入学习过的同学,还是希望可以一口气就看完,这是比较全面思维锻炼!
PDF文末领取
【程序1】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....
做这种题目,最好的做法就是找出规律,跟高中的数列一样
本题有:a[n]=a[n-1]+a[n-1],而第一第二项都知道了,后面的值也可以求得
public class Programme1 { public static void main(String[] args) { System.out.print("请输入你想知道的兔子数量的月份:"); Scanner scanner=new Scanner(System.in); int n=scanner.nextInt();//获取输入的整数 System.out.println("第"+n+"个月兔子总数为"+fun(n)); scanner.close(); } //求得所需月份的兔子的数量,返回值为兔子的数量 private static int fun(intn){ if(n==1 ||n==2) return 1; else returnfun(n-1)+fun(n-2); } } |
【程序2】
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:
* 素数是:只能被1或本身整除的数,如:3,5,7,11,131...
*判断素数的方法:用一个数分别去除2到sqrt(这个数),
*其实用这个数分别去除2到他本身少1的数也可以,但是运算时间增加了
*如果能被整除,则表明此数不是素数,反之是素数。
public class Programme2 {
public static void main(String[] args) { int sum=0; for (inti = 100; i < 200;i++) { if (IsRightNum(i)) { //判断这个数是不是素数 System.out.print(i+" "); sum++; if (sum%10==0) { //十个一行 System.out.println(); } } } System.out.println("素数的整数:"+sum);
}
//判断这个数是不是素数的具体代码 private static boolean IsRightNum(inti) { for (intj = 2; j < Math.sqrt(i);j++) { if (i%j==0) { //如果能整除,就说明不是素数,可以马上中断,继续对下一个数判断 return false; } }
return true; }
} |
【程序3】
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
public class Programme3 {
public static void main(String[] args) { int sum=0;//水仙花的总数 for (inti = 100; i < 1000;i++) { intbite=i%10; //求得个位 intten=i/10%10; //求得十位 inthundred=i/100;//求得百位 //如果符合水仙花条件的数打印出来 if (i==(bite*bite*bite)+ (ten*ten*ten)+(hundred*hundred*hundred)) { System.out.print(i+" "); sum++; }
} System.out.println("总共有水仙花个数:"+sum); } } |
【程序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 Programme4 {
public static void main(String[] args) { System.out.print("请输入一个你要分解的正整数:"); Scanner scanner=new Scanner(System.in); int input=scanner.nextInt();//获取输入的数字 System.out.println(); System.out.print(input+"="); for (inti = 2; i < input+1; i++) {
while(input%i==0&&input!=i) { input=input/i; System.out.print(i+"*"); } if(input==i){//上面的都不能整除,说明这是一个质数 System.out.print(i); break; } } scanner.close(); } }
|
【程序5】
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析:(a>b)?a:b这是条件运算符的基本例子。
public class Programme5 {
public static void main(String[] args) { System.out.println("请输入你的分数:"); Scanner scanner=new Scanner(System.in); int input=scanner.nextInt();//获取输入 //等级判断 String belong=input>=90?"A":(input>=60?"B":"c"); System.out.println(input+"分属于:"+belong); scanner.close(); } } |
【程序48】
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
程序分析:1、数字取位,个十百千位分别求出
* 2、按要求替换
* 3、按要求交换
public class Programme48 { public static void main(String[] args) { int[] num=new int[4];//存放四位数的个十百千位 System.out.println("请输入一个四位数:"); Scanner scanner=new Scanner(System.in); int input=scanner.nextInt();
for (inti = 0; i < 4;i++) {//逐次取位,从个位开始,并按要求替换 num[i]=(input%10+5)%10; input/=10; } //按要求替换,交换1、4位 int temp=0;//交换数 temp=num[0]; num[0]=num[3]; num[3]=temp; //交换2、3位 temp=num[1]; num[1]=num[2]; num[2]=temp; System.out.println("加密后的结果:"+num[3]+num[2]+num[1]+num[0]); scanner.close(); } }
|
【程序49】
题目:计算字符串中子串出现的次数
程序分析:把string类型的字符串的每个元素,转换为char数组里面的每个数组的值string.toCharArray()
* 判断char数组中是否存在空格,存在的话子字符串数量加1
public class Programme49 { public static void main(String[] args) { String string="aa bb df 23 d 3 df32 d"; int num=1;//子字符的数量 char[]c=string.toCharArray(); for (inti = 0; i < c.length; i++) { if (c[i]==' ') { num++; } } System.out.println(string+"有子字符串:"+num +" 个"); } } |
【程序50】
题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
最后这题涉及文件存储,输入输出流
import java.io.*; public class Prog50{ //定义学生模型 String[] number = new String[5]; String[] name = new String[5]; float[][] grade = new float[5][3]; float[] sum = new float[5]; public static void main(String[] args) throws Exception{ Prog50 stud = new Prog50(); stud.input(); stud.output(); } //输入学号、姓名、成绩 void input() throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //录入状态标识 boolean isRecord = true; while(isRecord){ try{ for(int i=0;i<5;i++){ System.out.print("请输入学号:"); number[i] = br.readLine(); System.out.print("请输入姓名:"); name[i] = br.readLine(); for(int j=0;j<3;j++){ System.out.print("请输入第"+(j+1)+"门课成绩:"); grade[i][j] = Integer.parseInt(br.readLine()); } System.out.println(); sum[i] = grade[i][0]+grade[i][1]+grade[i][2]; } isRecord = false; }catch(NumberFormatException e){ System.out.println("请输入一个数字!"); } } } //输出文件 void output() throws IOException{ FileWriter fw = new FileWriter("E://java50//stud.txt"); BufferedWriter bw = new BufferedWriter(fw); bw.write("No. "+"Name "+"grade1 "+"grade2 "+"grade3 "+"average"); bw.newLine(); for(int i=0;i<5;i++){ bw.write(number[i]); bw.write(" "+name[i]); for(int j=0;j<3;j++) bw.write(" "+grade[i][j]); bw.write(" "+(sum[i]/5)); bw.newLine(); } bw.close(); } } |
获取方式
1、点赞+在看
2、公众号后台回复:Java练习题