2022年完整word版,java入门道编程题 .pdf
50 道 JAVA 基础编程练习题【程序 1】题目:古典问题:有一对兔子,从出生后第3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.public class Prog1 public static void main(String args)int n=10;System.out.println(第+n+个月兔子总数为+fun(n);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 到 sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。public class Prog2 public static void main(String args)int m=1;int n=1000;int count=0;/统计素数个数for(int i=m;in;i+)if(isPrime(i)count+;System.out.print(i+);if(count%10=0)System.out.println();System.out.println();名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 41 页 -System.out.println(在+m+和+n+之间共有+count+个素数);/判断素数private static boolean isPrime(int n)boolean flag=true;if(n=1)flag=false;else for(int i=2;i=Math.sqrt(n);i+)if(n%i)=0|n=1)flag=false;break;else flag=true;return flag;【程序 3】题目:打印出所有的 水仙花数,所谓 水仙花数 是指一个三位数,其各位数字立方和等于该数本身。例如:153 是一个 水仙花数,因为 153=1 的三次方 5 的三次方 3 的三次方。程序分析:利用for 循环控制100-999 个数,每个数分解出个位,十位,百位。public class Prog3 public static void main(String args)for(int i=100;i1000;i+)if(isLotus(i)System.out.print(i+);System.out.println();/判断水仙花数private static boolean isLotus(int lotus)int m=0;int n=lotus;名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 41 页 -int sum=0;m=n/100;n -=m*100;sum=m*m*m;m=n/10;n-=m*10;sum+=m*m*m+n*n*n;if(sum=lotus)return true;else return false;【程序 4】题目:将一个正整数分解质因数。例如:输入90,打印出 90=2*3*3*5。程序分析:对n 进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果 nk,但 n能被 k 整除,则应打印出k 的值,并用n 除以 k 的商,作为新的正整数n,重复执行第一步。(3)如果 n不能被 k 整除,则用k+1 作为 k 的值,重复执行第一步。public class Prog4 public static void main(String args)int n=13;decompose(n);private static void decompose(int n)System.out.print(n+=);for(int i=2;i=90 分的同学用A表示,60-89 分之间的用 B表示,60 分以下的用C表示。程序分析:(ab)?a:b这是条件运算符的基本例子。public class Prog5 public static void main(String args)int n=-1;try n=Integer.parseInt(args0);catch(ArrayIndexOutOfBoundsException e)System.out.println(请输入成绩);return;grade(n);/成绩等级计算private static void grade(int n)if(n100|n=90)?分,属于 A 等:(n60)?分,属于B 等:分,属于C 等);System.out.println(n+str);【程序 6】题目:输入两个正整数m和 n,求其最大公约数和最小公倍数。程序分析:利用辗除法。public class Prog6 public static void main(String args)int m,n;try m=Integer.parseInt(args0);n=Integer.parseInt(args1);catch(ArrayIndexOutOfBoundsException e)System.out.println(输入有误);return;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 41 页 -max_min(m,n);/求最大公约数和最小公倍数private static void max_min(int m,int n)int temp=1;int yshu=1;int bshu=m*n;if(nm)temp=n;n=m;m=temp;while(m!=0)temp=n%m;n=m;m=temp;yshu=n;bshu/=n;System.out.println(m+和+n+的最大公约数为+yshu);System.out.println(m+和+n+的最小公倍数为+bshu);【程序 7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。程序分析:利用while 语句,条件为输入的字符不为n.import java.util.Scanner;public class Prog7_1 public static void main(String args)System.out.print(请输入一串字符:);Scanner scan=new Scanner(System.in);String str=scan.nextLine();/将一行字符转化为字符串scan.close();count(str);名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 41 页 -/统计输入的字符数private static void count(String str)String E1=u4e00-u9fa5;/汉字String E2=a-zA-Z;String E3=0-9;String E4=s;/空格int countChinese=0;int countLetter=0;int countNumber=0;int countSpace=0;int countOther=0;char array_Char=str.toCharArray();/将字符串转化为字符数组String array_String=new Stringarray_Char.length;/汉字只能作为字符串处理for(int i=0;iarray_Char.length;i+)array_Stringi=String.valueOf(array_Chari);/遍历字符串数组中的元素for(String s:array_String)if(s.matches(E1)countChinese+;else if(s.matches(E2)countLetter+;else if(s.matches(E3)countNumber+;else if(s.matches(E4)countSpace+;else countOther+;System.out.println(输入的汉字个数:+countChinese);System.out.println(输入的字母个数:+countLetter);System.out.println(输入的数字个数:+countNumber);System.out.println(输入的空格个数:+countSpace);System.out.println(输入的其它字符个数:+countSpace);名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 41 页 -import java.util.*;public class Prog7_2 public static void main(String args)System.out.println(请输入一行字符:);Scanner scan=new Scanner(System.in);String str=scan.nextLine();scan.close();count(str);/统计输入的字符private static void count(String str)List list=new ArrayList();char array_Char=str.toCharArray();for(char c:array_Char)list.add(String.valueOf(c);/将字符作为字符串添加到list表中Collections.sort(list);/排序for(String s:list)int begin=list.indexOf(s);int end=list.lastIndexOf(s);/索引结束统计字符数if(list.get(end)=s)System.out.println(字符+s+有+(end-begin+1)+个);【程序 8】题目:求 s=a+aa+aaa+aaaa+aa.a的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此时共有 5 个数相加),几个数相加有键盘控制。程序分析:关键是计算出每一项的值。import java.util.Scanner;public class Prog8 public static void main(String args)System.out.print(求 s=a+aa+aaa+aaaa+.的值,请输入a 的值:);Scanner scan=new Scanner(System.in).useDelimiter(s*);/以空格作为分隔符名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 41 页 -int a=scan.nextInt();int n=scan.nextInt();scan.close();/关闭扫描器System.out.println(expressed(2,5)+add(2,5);/求和表达式private static String expressed(int a,int n)StringBuffer sb=new StringBuffer();StringBuffer subSB=new StringBuffer();for(int i=1;in+1;i+)subSB=subSB.append(a);sb=sb.append(subSB);if(in)sb=sb.append(+);sb.append(=);return sb.toString();/求和private static long add(int a,int n)long sum=0;long subSUM=0;for(int i=1;in+1;i+)subSUM=subSUM*10+a;sum=sum+subSUM;return sum;【程序 9】题目:一个数如果恰好等于它的因子之和,这个数就称为 完数。例如 6=123.编程找出 1000 以内的所有完数。public class Prog9 public static void main(String args)int n=10000;compNumber(n);名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 41 页 -/求完数private static void compNumber(int n)int count=0;System.out.println(n+以内的完数:);for(int i=1;in+1;i+)int sum=0;for(int j=1;ji/2+1;j+)if(i%j)=0)sum+=j;if(sum=i)System.out.print(i+);if(count+)%5=0)System.out.println();【程序 10】题目:一球从100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10 次落地时,共经过多少米?第10 次反弹多高?import java.util.Scanner;public class Prog10 public static void main(String args)System.out.print(请输入小球落地时的高度和求解的次数:);Scanner scan=new Scanner(System.in).useDelimiter(s);int h=scan.nextInt();int n=scan.nextInt();scan.close();distance(h,n);/小球从 h 高度落下,经n 次反弹后经过的距离和反弹的高度private static void distance(int h,int n)double length=0;名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 41 页 -for(int i=0;in;i+)length+=h;h/=2.0;System.out.println(经过第+n+次反弹后,小球共经过+length+米,+第+n+次反弹高度为+h+米);【程序 11】题目:有1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。public class Prog11 public static void main(String args)int count=0;int n=0;for(int i=1;i5;i+)for(int j=1;j5;j+)if(j=i)continue;for(int k=1;k1000000)profit=profit_sub-1000000;profit_sub=1000000;prize+=profit*0.01;if(profit600000)profit=profit_sub-600000;profit_sub=600000;名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 41 页 -prize+=profit*0.015;if(profit400000)profit=profit_sub-400000;profit_sub=400000;prize+=profit*0.03;if(profit200000)profit=profit_sub-200000;profit_sub=200000;prize+=prize*0.05;if(profit100000)profit=profit_sub-100000;profit_sub=100000;prize+=profit*0.075;prize+=profit_sub*0.1;return prize;【程序 13】题目:一个整数,它加上100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?程序分析:在10 万以内判断,先将该数加上100 后再开方,再将该数加上268 后再开方,如果开方后的结果满足如下条件,即是结果。public class Prog13 public static void main(String args)int n=0;for(int i=0;i100001;i+)if(isCompSqrt(i+100)&isCompSqrt(i+268)n=i;break;System.out.println(所求的数是:+n);/判断完全平方数private static boolean isCompSqrt(int n)名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 41 页 -boolean isComp=false;for(int i=1;iMath.sqrt(n)+1;i+)if(n=Math.pow(i,2)isComp=true;break;return isComp;【程序 14】题目:输入某年某月某日,判断这一天是这一年的第几天?程序分析:以 3 月 5 日为例,应该先把前两个月的加起来,然后再加上5 天即本年的第几天,特殊情况,闰年且输入月份大于3 时需考虑多加一天。import java.util.Scanner;public class Prog14 public static void main(String args)Scanner scan=new Scanner(System.in).useDelimiter(D);/匹配非数字System.out.print(请输入当前日期(年-月-日):);int year=scan.nextInt();int month=scan.nextInt();int date=scan.nextInt();scan.close();System.out.println(今天是+year+年的第+analysis(year,month,date)+天);/判断天数private static int analysis(int year,int month,int date)int n=0;int month_date=new int 0,31,28,31,30,31,30,31,31,30,31,30;if(year%400)=0|(year%4)=0)&(year%100)!=0)month_date2=29;for(int i=0;iy 则将 x 与 y的值进行交换,然后再用x 与 z 进行比较,如果xz 则将 x 与 z 的值进行交换,这样能使x最小。import java.util.Scanner;public class Prog15 public static void main(String args)Scanner scan=new Scanner(System.in).useDelimiter(D);System.out.print(请输入三个数:);int x=scan.nextInt();int y=scan.nextInt();int z=scan.nextInt();scan.close();System.out.println(排序结果:+sort(x,y,z);/比较两个数的大小private static String sort(int x,int y,int z)String s=null;if(xy)int t=x;x=y;y=t;if(xz)int t=x;x=z;z=t;if(yz)int t=z;z=y;y=t;s=x+y+z;名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 41 页 -return s;【程序 16】题目:输出9*9 口诀。程序分析:分行与列考虑,共9行 9 列,i 控制行,j 控制列。public class Prog16 public static void main(String args)for(int i=1;i10;i+)for(int j=1;j0;i-)m=2*m+2;System.out.println(小猴子共摘了+m+桃子);【程序 18】题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a 说他不和x 比,c 说他不和x,z 比,请编程序找出三队赛手的名单。import java.util.ArrayList;public class Prog18 String a,b,c;/甲队成员public static void main(String args)名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 41 页 -String racer=x,y,z;/乙队成员ArrayList arrayList=new ArrayList();for(int i=0;i3;i+)for(int j=0;j3;j+)for(int k=0;k3;k+)Prog18 prog18=new Prog18(raceri,racerj,racerk);if(!prog18.a.equals(prog18.b)&!prog18.a.equals(prog18.c)&!prog18.b.equals(prog18.c)&!prog18.a.equals(x)&!prog18.c.equals(x)&!prog18.c.equals(z)arrayList.add(prog18);for(Object obj:arrayList)System.out.println(obj);/构造方法private Prog18(String a,String b,String c)this.a=a;this.b=b;this.c=c;public String toString()return a的对手是+a+b的对手是+b+c的对手是+c;【程序 19】题目:打印出如下图案(菱形)*程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 41 页 -public class Prog19 public static void main(String args)int n=5;printStar(n);/打印星星private static void printStar(int n)/打印上半部分for(int i=0;in;i+)for(int j=0;j2*n;j+)if(j=n-i&j=n+i)System.out.print(*);System.out.println();/打印下半部分for(int i=1;in;i+)System.out.print();for(int j=0;j2*n-i;j+)if(j=i&j2*n-i-1)System.out.print(*);System.out.println();【程序 20】题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.求出这个数列的前20 项之和。程序分析:请抓住分子与分母的变化规律。public class Prog20 public static void main(String args)double n1=1;名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 41 页 -double n2=1;double fraction=n1/n2;double Sn=0;for(int i=0;i20;i+)double t1=n1;double t2=n2;n1=t1+t2;n2=t1;fraction=n1/n2;Sn+=fraction;System.out.print(Sn);【程序 21】题目:求1+2!+3!+.+20!的和程序分析:此程序只是把累加变成了累乘。public class Prog21 public static void main(String args)long sum=0;for(int i=0;i20;i+)sum+=factorial(i+1);System.out.println(sum);/阶乘private static long factorial(int n)int mult=1;for(int i=1;in+1;i+)mult*=i;return mult;【程序 22】题目:利用递归方法求5!。程序分析:递归公式:fn=fn_1*4!public class Prog22 名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 41 页 -public static void main(String args)System.out.println(fact(10);/递归求阶乘private static long fact(int n)if(n=1)return 1;else return fact(n-1)*n;【程序 23】题目:有5 个人坐在一起,问第五个人多少岁?他说比第4 个人大 2 岁。问第4 个人岁数,他说比第3 个人大 2 岁。问第三个人,又说比第2 人大两岁。问第 2 个人,说比第一个人大两岁。最后问第一个人,他说是10 岁。请问第五个人多大?程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10 岁),再往回推。public class Prog23 public static void main(String args)System.out.println(getAge(5,2);/求第 m位同志的年龄private static int getAge(int m,int n)if(m=1)return 10;else return getAge(m-1,n)+n;【程序 24】题目:给一个不多于5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。public class Prog24 public static void main(String args)int n=Integer.parseInt(args0);int i=0;int a=new int5;名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 41 页 -do ai=n%10;n/=10;+i;while(n!=0);System.out.print(这是一个+i+位数,从个位起,各位数字依次为:);for(int j=0;ji;j+)System.out.print(aj+);【程序 25】题目:一个5 位数,判断它是不是回文数。即12321 是回文数,个位与万位相同,十位与千位相同。import java.io.*;public class Prog25 public static void main(String args)int n=0;System.out.print(请输入一个5 位数:);BufferedReader bufin=new BufferedReader(new InputStreamReader(System.in);try n=Integer.parseInt(bufin.readLine();catch(IOException e)e.printStackTrace();finally try bufin.close();catch(IOException e)e.printStackTrace();palin(n);private static void palin(int n)int m=n;int a=new int5;名师资料总结-精品资料欢迎下载-名师精心整理-第 20 页,共 41 页 -if(n99999)System.out.println(输入的不是5 位数!);return;else for(int i=0;i5;i+)ai=n%10;n/=10;if(a0=a4&a1=a3)System.out.println(m+是一个回文数);else System.out.println(m+不是回文数);【程序 26】题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。import java.io.*;public class Prog26 public static void main(String args)String str=new String();BufferedReader bufIn=new BufferedReader(new InputStreamReader(System.in);System.out.print(请输入星期的英文单词前两至四个字母):);try str=bufIn.readLine();catch(IOException e)e.printStackTrace();finally try bufIn.close();catch(IOException e)e.printStackTrace();名师资料总结-精品资料欢迎下载-名师精心整理-第 21 页,共 41 页 -week(str);private static void week(String str)int n=-1;if(str.trim().equalsIgnoreCase(Mo)|str.trim().equalsIgnoreCase(Mon)|str.trim().equalsIgnoreCase(Mond)n=1;if(str.trim().equalsIgnoreCase(Tu)|str.trim().equalsIgnoreCase(Tue)|str.trim().equalsIgnoreCase(Tues)n=2;if(str.trim().equalsIgnoreCase(We)|str.trim().equalsIgnoreCase(Wed)|str.trim().equalsIgnoreCase(Wedn)n=3;if(str.trim().equalsIgnoreCase(Th)|str.trim().equalsIgnoreCase(Thu)|str.trim().equalsIgnoreCase(Thur)n=4;if(str.trim().equalsIgnoreCase(Fr)|str.trim().equalsIgnoreCase(Fri)|str.trim().equalsIgnoreCase(Frid)n=5;if(str.trim().equalsIgnoreCase(Sa)|str.trim().equalsIgnoreCase(Sat)|str.trim().equalsIgnoreCase(Satu)n=2;if(str.trim().equalsIgnoreCase(Su)|str.trim().equalsIgnoreCase(Sun)|str.trim().equalsIgnoreCase(Sund)n=0;switch(n)case 1:System.out.println(星期一);break;case 2:System.out.println(星期二);break;case 3:System.out.println(星期三);名师资料总结-精品资料欢迎下载-名师精心整理-第 22 页,共 41 页 -break;case 4:System.out.println(星期四);break;case 5:System.out.println(星期五);break;case 6:System.out.println(星期六);break;case 0:System.out.println(星期日);break;default:System.out.println(输入有误!);break;【程序 27】题目:求100 之内的素数public class Prog27 public static void main(String args)int n=100;System.out.print(n+以内的素数:);for(int i=2;in+1;i+)if(isPrime(i)System.out.print(i+);/求素数private static boolean isPrime(int n)boolean flag=true;for(int i=2;iMath.sqrt(n)+1;i+)if(n%i=0)flag=false;名师资料总结-精品资料欢迎下载-名师精心整理-第 23 页,共 41 页 -break;return flag;【程序 28】题目:对10 个数进行排序程序分析:可以利用选择法,即从后9 个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8 个进行比较,并进行交换。public class Prog28 public static void main(String args)int a=new int31,42,21,50,12,60,81,74,101,93;for(int i=0;i10;i+)for(int j=0;jaj+1)int temp=aj;aj=aj+1;aj+1=temp;for(int i=0;ia.length;i+)System.out.print(ai+);【程序 29】题目:求一个3*3 矩阵对角线元素之和程序分析:利用双重for循环控制输入二维数组,再将aii累加后输出。public class Prog29 public static void main(String args)int a=new int 100,2,3,4,5,6,17,8,9;matrSum(a);private static void matrSum(int a)int sum1=0;int sum2=0;for(int i=0;ia.length;i+)for(int j=0;jai.length;j+)名师资料总结-精品资料欢迎下载-名师精心整理-第 24 页,共 41 页 -if(i=j)sum1+=aij;if(j=a.length-i-1)sum2+=aij;System.out.println(矩阵对角线之和分别是:+sum1+和+sum2);【程序 30】题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。import java.util.Scanner;public class Prog30 public static void main(String args)int A=new int0,8,7,5,9,1,2,4,3,12;int B=sort(A);print(B);System.out.println();System.out.print(请输入 10 个数的数组:);Scanner scan=new Scanner(System.in);int a=scan.nextInt();scan.close();int C=insert(a,B);print(C);/选择排序private static int sort(int A)int B=new intA.length;for(int i=0;iA.length-1;i+)i