您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > 50道JAVA基础编程练习题全面解答
50道JAVA基础编程练习题解答本人尚属菜鸟,因此下面的解答有可能会出现错误,也可能使用的方法不够简便,希望指正。发现错误了,请QQ联系我,希望得到指正。QQ:474027915【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....解答:(方法一)利用数学分析可得知:这个月的兔子数量为前两个月的兔子数量之和,推导过程如下:X1,X2,X3Y1,Y2,Y3Z1,Z2,Z3X1:表示一个月大的兔子;X2表示两个月大的兔子;X3表示三个月及三月以上的兔子。有以下数学表达式:Y1=X2+X3,Y2=X1,Y3=X2+X3Z1=Y2+Y3,Z2=Y1,Z3=Y2+Y3Z1+Z2+Z3=Y2+Y3+Y1+(Y2+Y3)=(Y2+Y3+Y1)+(X2+X3+X1)因此上面每个月的兔子的数量满足斐波那契数列。编程实现较为简单,此处省略。(方法二)方法二利用编程实现,具有一般性(开始兔子个数和产仔周期可自行输入),程序设计如下:importjava.util.*;importjava.io.*;classTuZi{intnianling=1;}publicclassText1{publicstaticvoidmain(String[]args)throwsIOException{//TODOAuto-generatedmethodstubintshuliang=1;intzhouqi=4;intyuefen=0;VectorTuZirongqi=newVectorTuZi();System.out.print(输入兔子开始数量:);BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));shuliang=(newInteger(stdin.readLine()));System.out.print(输入兔子生产周期:);zhouqi=(newInteger(stdin.readLine()));System.out.print(输入查询月份:);yuefen=(newInteger(stdin.readLine()));for(inti=1;i=shuliang;i++){rongqi.addElement(newTuZi());}for(inti=2;i=yuefen;i++){for(intj=0;jrongqi.size();j++){TuZia=(TuZi)rongqi.elementAt(j);a.nianling++;}for(intj=0;jrongqi.size();j++){if(rongqi.elementAt(j).nianling=zhouqi){rongqi.addElement(newTuZi());}}}System.out.print(兔子数量为:+rongqi.size());}}【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。解答:程序如下:publicclassText2{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubintsum=0;System.out.print(101到200的素数是:);for(inti=101;i=200;i++){intflag=0;for(intj=2;j=Math.sqrt(i);j++){floatk=(float)i;if(k%j==0){flag=1;break;}}if(flag==0){System.out.print(i+);sum++;}}System.out.println();System.out.print(素数个数为:);System.out.print(sum);}}【程序3】题目:打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个水仙花数,因为153=1的三次方+5的三次方+3的三次方。1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。解答:程序如下:publicclassText3{publicstaticvoidmain(String[]args){inta=0;intb=0;intc=0;System.out.println(100到999的水仙花数为:);for(inti=100;i=999;i++){a=i/100;b=i/10-a*10;c=i-b*10-a*100;if(i==a*a*a+b*b*b+c*c*c){System.out.println(i);}}}}【程序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的值,重复执行第一步。这个题目很明显是要用递归算法来实现的,打印“*”有些技巧,但也很容易解决,程序如下:importjava.io.*;publicclassText4{publicstaticvoidchuLi(intn){for(inti=2;i=n;i++){if(n==i){System.out.print(i);return;}if(ni&&(n%i==0)){n=n/i;System.out.print(i+*);chuLi(n);break;//这句很重要}}}publicstaticvoidmain(String[]args)throwsIOException{intshu=0;BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));System.out.print(请输入正整数:);shu=(newInteger(stdin.readLine()));chuLi(shu);}}【程序5】题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。解答:此题较为简单,程序如下importjava.io.*;publicclassText5{publicstaticvoidmain(String[]agrs)throwsIOException{System.out.print(请输入成绩:);BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));intchengji=newInteger(stdin.readLine());chardengji=chengji60?'C':(chengji=90?'A':'B');System.out.print(dengji);}}【程序6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。求最大公约数算法(1)设计:E0.[确保mn]若mn,则mn。E1.[求余数]以n除m并令r为所得余数。(我们将有0rn。)E2.[余数为0?]若r为0,算法结束,n即为所求答案。E3.[减少]置mn,nr,并返回步骤E1。数学证明:(1)若m%n=0,则n为所求最大公因子(2)若m%n0,则只需证明下面命题成立如果某数是n与m%n的最大公因子,则这个数也是m和n的最大公因子。(上面算法可化为这句话)证明:假设a是n和m%n的最大公因子,则有:因有(m%n)%a=0,故可设m%n=k*a,k为正整数。又n%a=0,故可设n=p*a,p也为正整数。可得数学表达式:m=t*n+m%n,其中t为不小于0的整数。因此有:m=t*p*a+k*a=(t*p+k)*a,因此可得m%a=0因此有如下两个表达式:a为m和n的公因子已经证毕。如何确定a为m和n的最大公因子?(可用反证法证明)证明:假设m和n存在公因子b,且有ba。则有:可以仿照上面的推导过程得出:则b也是n和m%n的公因子,又ba,与a是n和m%n的最大公因子矛盾。综上,如果某数是n与m%n的最大公因子,则这个数也是m和n的最大公因子。(3)证毕。对步骤E0的分析:若mn,则m%n=m。当进行E0后,m为较大者,m%nn。算法(2)设计:F1.[余数m/n]以n除m,并令m为余数。F2.[它是0?]如果m=0,则此算法以n为答案而终止。F3.[余数n/m]以m除n,并令n是余数。F4.[它是0?]如果n=0,则算法以答案m而终止,否则返回步骤F1。算法(2)可仿照算法(1)进行证明求最大公倍数算法设计:F1:求出m和n的较大者,令较大者为m,较小者为n。F2:判断m能否被n整除,若能则m为两者最小公倍数。F2:将n分解因式。F3:将m依次乘以n的因子,判断乘积能否被n整除,若能则乘积为两者最小公倍数。根据上面的算法,程序如下:importjava.io.*;importjava.util.*;publicclassText6{publicstaticvoidfenJie(VectorIntegerm,intn){for(inti=2;i=n;i++){if(n==i){m.addElement(i);return;}if(ni&&(n%i==0)){n=n/i;m.addElement(i);fenJie(m,n);break;}}}publicstaticintgongBeiShu(VectorIntegerm,inta,intb){intchengji=1;if(a%b==0)returna;for(inti=0;im.size();i++){chengji=chengji*m.elementAt(i);if((a*chengji)%b==0){returna*chengji;}}returna*b;}publicstaticintbigYinZi(inta,intb){intr=a%b;intm=0;if(r==0)returnb;else{a=b;b=r;m=bigYinZi(a,b);returnm;}}publicstaticvoidmain(String[]args)throwsIOException{Integershu1=0;Integershu2=0;intt=0;VectorIntegerpool=newVectorInteger();BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));System.out.print(请输入第一个正整数:);shu1=(newInteger(stdin.readLine()));System.out.print(请输入第二个正整数:);shu2=(newInteger(stdin.readLine()));if(shu1shu2){t=shu2;shu2=shu1;shu1=t;}fenJie(pool,shu2);t=bigYinZi(shu1,shu2);System.out.println(最大公约数是:+t);t=gongBeiShu(pool,shu1,shu2);System.out.print(最小公倍数:+t);}}【程序7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和
本文标题:50道JAVA基础编程练习题全面解答
链接地址:https://www.777doc.com/doc-2239347 .html