50道JAVA基础编程练习题全面解答.doc
《50道JAVA基础编程练习题全面解答.doc》由会员分享,可在线阅读,更多相关《50道JAVA基础编程练习题全面解答.doc(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、50道JAVA基础编程练习题解答本人尚属菜鸟,因此下面的解答有可能会出现错误,也可能使用的方法不够简便,希望指正。发现错误了,请QQ联系我,希望得到指正。 QQ:474027915【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? .程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21. 解答:(方法一)利用数学分析可得知:这个月的兔子数量为前两个月的兔子数量之和,推导过程如下:X1,X2,X3 Y1,Y2,Y3 Z1,Z2,Z3X1:表示一个月大的兔子;X2表示两个月大的兔子
2、;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)因此上面每个月的兔子的数量满足斐波那契数列。编程实现较为简单,此处省略。(方法二)方法二利用编程实现,具有一般性(开始兔子个数和产仔周期可自行输入),程序设计如下:import java.util.*;import java.io.*;class TuZiint nianling=1;public class Text1 public static
3、void main(String args) throws IOException / TODO Auto-generated method stubint shuliang=1;int zhouqi=4;int yuefen=0;Vector rongqi=new Vector();System.out.print(输入兔子开始数量:);BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in);shuliang=(new Integer(stdin.readLine();System.out.print(
4、输入兔子生产周期:);zhouqi=(new Integer(stdin.readLine();System.out.print(输入查询月份:);yuefen=(new Integer(stdin.readLine();for(int i=1;i=shuliang;i+)rongqi.addElement(new TuZi();for(int i=2;i=yuefen;i+)for(int j=0;jrongqi.size();j+)TuZi a=(TuZi)rongqi.elementAt(j);a.nianling+;for(int j=0;j=zhouqi)rongqi.addElem
5、ent(new TuZi();System.out.print(兔子数量为:+rongqi.size();【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 解答:程序如下:public class Text2 public static void main(String args) / TODO Auto-generated method stubint sum=0;System.out.print(101到200的素数是: );for(int i=101
6、;i=200;i+)int flag=0;for(int j=2;j=Math.sqrt(i);j+)float k=(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
7、-999个数,每个数分解出个位,十位,百位。 解答:程序如下:public class Text3 public static void main(String args)int a=0;int b=0;int c=0;System.out.println(100到999的水仙花数为:);for(int i=100;ik,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 这个题目很明显是要用递归算法来实现的,打印“*”有些技巧,但也很容易解决,程序如下:import java.io.*;p
8、ublic class Text4 public static void chuLi(int n)for(int i=2;ii&(n%i=0)n=n/i;System.out.print(i+*);chuLi(n);break;/这句很重要public static void main(String args) throws IOExceptionint shu=0;BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in);System.out.print(请输入正整数:);shu=(new Integer
9、(stdin.readLine();chuLi(shu);【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 解答:此题较为简单,程序如下import java.io.*;public class Text5 public static void main(String agrs) throws IOExceptionSystem.out.print(请输入成绩:);BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in);i
10、nt chengji=new Integer(stdin.readLine();char dengji=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的最大公因子,则这个数也
11、是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的最大
12、公因子,则这个数也是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整除,若能则乘积为两者最小公倍数。根
13、据上面的算法,程序如下:import java.io.*;import java.util.*;public class Text6 public static void fenJie(Vector m,int n)for(int i=2;ii&(n%i=0)n=n/i;m.addElement(i);fenJie(m,n);break;public static int gongBeiShu(Vector m,int a,int b)int chengji=1;if(a%b=0)return a;for(int i=0;im.size();i+)chengji=chengji*m.eleme
14、ntAt(i);if(a*chengji)%b=0)return a*chengji;return a*b;public static int bigYinZi(int a,int b)int r=a%b;int m=0;if(r=0)return b;elsea=b;b=r;m=bigYinZi(a,b);return m;public static void main(String args) throws IOExceptionInteger shu1=0;Integer shu2=0;int t=0;Vector pool=new Vector();BufferedReader std
15、in=new BufferedReader(new InputStreamReader(System.in);System.out.print(请输入第一个正整数:);shu1=(new Integer(stdin.readLine();System.out.print(请输入第二个正整数:);shu2=(new Integer(stdin.readLine();if(shu1shu2)t=shu2;shu2=shu1;shu1=t;fenJie(pool,shu2);t=bigYinZi(shu1,shu2);System.out.println(最大公约数是:+t);t=gongBeiSh
16、u(pool,shu1,shu2);System.out.print(最小公倍数:+t);【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 解答: 这题需要对汉字的内码进行一定的了解,汉字占两个字节,每个字节的开始位为1。程序如下:import java.io.*;public class Text7 public static void main(String agrs) throws IOExceptionString zifuchuan=new String();int hanzishu=0;int zimu=0;int kongge=0;int sh
17、uzi=0;int qita=0;System.out.print(请输入一行字符:);BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in);zifuchuan=stdin.readLine();byte bytes=zifuchuan.getBytes();for(int i=0;i=65&bytesi=97&bytesi=48&bytesi=57)shuzi+;else if(bytesi0)hanzishu+;elseqita+;System.out.println(字符串所占字节个数为:+byt
18、es.length);System.out.println(汉字个数为:+hanzishu/2);System.out.println(英文字母个数为:+zimu);System.out.println(空格个数为:+kongge);System.out.println(数字个数为:+shuzi);System.out.println(其他字符个数为:+qita);【程序8】 题目:求s=a+aa+aaa+aaaa+aa.a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 解答:在此题中,利用进行字符串运算的“+”运算符,然后将字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 50 JAVA 基础 编程 练习题 全面 解答
限制150内