




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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表示两个月大的兔子;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 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(输入兔子生产周期:);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.addElement(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;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-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.*;public 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(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);int chengji=new Integer(stdin.readLine();char dengji=chengji=90?A:B);System.out.print(dengji); 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 算法(1)设计:E0.确保mn 若ma。则有:m%b=0n%b=0可以仿照上面的推导过程得出:n%b=0m%n%b=0则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整除,若能则乘积为两者最小公倍数。根据上面的算法,程序如下: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.elementAt(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 stdin=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=gongBeiShu(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 shuzi=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(字符串所占字节个数为:+bytes.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个数相加),几个数相加有键盘控制。 解答:在此题中,利用进行字符串运算的“+”运算符,然后将字符串转为数字,实现了程序过程,程序设计如下:import java.io.*;public class Text8 public static void main(String args) throws IOExceptionint s=0;int a=0;int sum=0;String p=;BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in);System.out.print(请输入数字a:);a=new Integer(stdin.readLine();System.out.print(请输入数字个数s:);s=new Integer(stdin.readLine();for(int i=1;i=s;i+)Character c=(char)(a+0);p=c.toString();for(int j=1;ji;j+)p=p+a;int d=Integer.parseInt(p);sum=sum+d;System.out.println(结果为:+sum);【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=123.编程 找出1000以内的所有完数。 解答:根据题目意思,设计程序如下:import java.io.*;import java.util.*;public class Text9 public static void fenJie(Vector m,int n)for(int i=1;i=n/2;i+)if(n%i=0) m.addElement(i);public static boolean panBie(Vector m,int n)int sum=0;for(int i=0;im.size();i+)sum=sum+m.elementAt(i);if(sum=n)return true;elsereturn false;public static void main(String args) throws IOExceptionboolean zhenjia=false;System.out.println(1000以内的完数为:);for(int i=2;i1000;i+)Vector pool=new Vector();fenJie(pool,i);zhenjia=panBie(pool,i);if(zhenjia)System.out.println(i);【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 解答:此题较为简单,程序设计如下:import java.io.*;public class Text10 public static void main(String args) throws IOException float heigh=100;int cishu=10;float sum=0;BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in);System.out.print(输入初始下落高度:);heigh=(new Float(stdin.readLine();sum=heigh;System.out.print(输入落地碰撞次数:);cishu=(new Integer(stdin.readLine();for(int i=1;icishu;i+)heigh=heigh/2;sum=sum+heigh*2;System.out.println(第+cishu+次反弹高度为:+heigh);System.out.println(第+cishu+次落地总经过长度为:+sum);【程序11】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 解答:理解好排列组合,可设计程序如下:public class Text11 public static void main(String args) int a=1,2,3,4;System.out.println(满足条件的三位数是:);for(int i=0;ia.length;i+)for(int j=0;ja.length;j+)if(j=i)continue;for(int k=0;ka.length;k+)if(k=i|k=j)continue;for(int h=0;ha.length;h+)if(h=i|h=j|h=k)continue;System.out.println(aj*100+ak*10+ah);/output满足条件的三位数是:234243324342423432134143314341413431124142214241412421123132213231312321【程序12】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 解答:此题较为简单,注意定义时需把奖金定义成长整型。程序设计如下:import java.io.*;public class Text12 public static void main(String args) throws IOException float lirun=0;double jiangjin=0;BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in);System.out.print(输入当月利润(万):);lirun=(new Float(stdin.readLine();if(lirun=10)jiangjin=lirun*0.1;else if(lirun=20)jiangjin=(lirun-10)*0.075+10*0.1;else if(lirun=40)jiangjin=(lirun-20)*0.05+10*0.075+10*0.1;else if(lirun=60)jiangjin=(lirun-40)*0.03+20*0.05+10*0.075+10*0.1;else if(lirun=100)jiangjin=(lirun-60)*0.015+20*0.3+20*0.05+10*0.075+10*0.1;elsejiangjin=(lirun-100)*0.01+40*0.015+20*0.3+20*0.05+10*0.075+10*0.1;System.out.print(当月奖金为(万):+jiangjin);【程序13】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 解答:可先对问题进行适当分析,分析情况如下:假设整数为X,第一个完全平方数为M,第二个完全平方数为N,则有下面的关系式。X+100=M2X+168=N2将两个式子相减,再进行适当的数学变形可得:(N-M)(N+M)=68得出可被68整除的数(前面已经编程实现),令N-M=Y,N+M=Z。则有N=(Y+Z)/2(N需为正整数),则有X=N*N-168。则可得出答案。程序设计如下:(一般性程序,两个数可以自己输入)import java.io.*;import java.util.*;public class Text13 public static void fenJie(Vector m,int n)for(int i=1;i=Math.sqrt(n);i+)if(n%i=0) m.addElement(i);public static void main(String args) throws IOExceptionVector pool=new Vector();int m=100;int n=168;int t=0;int flag=0;BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in);System.out.print(输入第一个正整数:);m=new Integer(stdin.readLine();System.out.print(输入第二个正整数:);n=new Integer(stdin.readLine();if(mn)t=m;m=n;n=t;fenJie(pool,n-m);int a=0;int b=0;int N=0;int x=0;for(int i=0;i0)flag=1;System.out.println(x);if(flag=0)System.out.println(不存在这样的数字!);【程序14】 题目:输入某年某月某日,判断这一天是这一年的第几天? 解答:闰年的判断,可根据以下三点进行判断。1、普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1900年不是闰年)2、世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)3、对于数值很大的年份,这年如果能整除3200,并且能整除172800则是闰年。如172800年是闰年,86400年不是闰年(因为虽然能整除3200,但不能整除172800)分析: 利用Scanner类中nextInt()进行数据的读取,由于是连续输入而且输入中有汉字,故这种方法不行。程序设计需要改进,现利用Character.isDigit方法进行程序设计,达到了较为理想的结果,程序如下所示。(此程序中有一段代码是对字符串中的数字进行提取,如211年8月8日提取三个数字分别为:211、8、8)import java.io.*;import java.util.*;public class Text14xin public static void main(String args) throws IOExceptionlong year=0;long month=0;long day=0;String m=new String();String n=new String();Vector s=new Vector();long tianshu=0;int monthday=31,28,31,30,31,30,31,31,30,31,30,31;BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in);System.out.print(输入日期:);m=stdin.readLine();char mass = m.toCharArray();for(int i=0;i=172800)if(year%3200=0&year%172800=0)monthday1=29;elseif(year%4=0&year%100!=0)monthday1=29;if(year%400=0)monthday1=29;for(int j=0;jmonth-1;j+)tianshu=tianshu+monthdayj;tianshu=tianshu+day;System.out.print(m+是这一年的第+tianshu+天。);/output输入日期:211年3月1日211年3月1日是这一年的第60天。输入日期:444nian3yue5ri444nian3yue5ri是这一年的第65天。【程序15】 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 解答:利用Scanner类中nextInt()进行数据的读取,Arrays.sort(a)进行排序,程序设计如下:import java.io.*;import java.util.*;public class Text15xin public static void main(String args) throws IOException String m=new String();int a=0,0,0;BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in);System.out.print(输入三个数(以一个空格隔开):);m=stdin.readLine();Scanner scan=new Scanner(m);for(int i=0;i3;i+)ai=scan.nextInt();Arrays.sort(a);System.out.print(三个数的升序排列为:);for(int i=0;i3;i+)System.out.print(ai+ );【程序16】 题目:输出9*9口诀。 1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。 解答:此题较为简单,程序设计如下:public class Text16 public static void main(String args)for(int i=1;i=9;i+)for(int j=1;j=1;i-)a=(a+1)*2;System.out.print(a);【程序18】 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 解答:分析:其实问题可转化为排列组合问题,a可以选x,y,z中的一个,b可以选剩下两个中的一个,而c只能选最后剩下的一个,总共有6中可能。关于排列的实现可以参照程序11,具体程序如下:public class Text18 public static void main(String args) Character b=x,y,z;for(int j=0;j3;j+)for(int k=0;k3;k+)if(j=k)continue;for(int h=0;h3;h+)if(h=j|h=k)continue;if(bj!=x&bh!=x&bh!=z)String s1=bj.toString();String s2=bk.toString();String s3=bh.toString();System.out.println( a+(vs)+s1+ b+(vs)+s2+ c+(vs)+s3);/output: a(vs)z b(vs)x c(vs)y【程序19】 题目:打印出如下图案(菱形) * * * * * * * 解答:1.先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。问题比较简单,就不进行编程了。2为了使问题具有一般性,现在我们输入菱形的行数,编程实现菱形的绘制。分析:1、输入的列数必须为行数2、假设输入的数字为n,则第(n+1)/2为中间一行,进行一些简单的数学推导,便能推出具体某一行的打印情况,程序设计如下:import java.io.*;public class Text19 public static void main(String args) throws Exceptionint n=0;BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in);System.out.print(请输入菱形行数:);n=(new Integer(stdin.readLine();if(n%2!=0)for(int i=1;i=(n+1)/2;i+)for(int j=1;j=(n-1)/2+i;j+)if(j=(n+1)/2-i)System.out.print( );elseSystem.out.print(*);System.out.println();for(int i=(n+3)/2;i=n;i+)for(int j=1;j=(3*n+1)/2-i;j+)if(j=i-(n+1)/2)System.out.print( );elseSystem.out.print(*);System.out.println();elseSystem.out.print(请确保行数为奇数!);/output:请输入菱形行数:7 * * * * * *【程序20】 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.求出这个数列的前20项之和。 解答:分析:请抓住分子与分母的变化规律。 分子分母都是斐波那契数列,递推公式的得出较为简单,程序设计如下:public class Text20 public static void main(String args) float fenmu=1;float fenzi=2;float sum=fenzi/fenmu;float t=0;for(int i=1;i20;i+)t=fenmu+fenzi;fenmu=fenzi;fenzi=t;sum=sum+fenzi/fenmu;System.out.print(sum);/output:32.660263【程序21】 题目:求1+2!+3!+.+20!的和 解答:注意:由于数据较大,应该将数据类型设为double,当所得数据超过double的最大值时,显示为Infinity。而当数据类型设为int或者其他不是double类型的时候,超过该类型的最大值时,溢出,先往符号位进一位,显示为负数,当再进位时,则进行窄化处理,显示这个类型所占字节的大小。public class Text21 public s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山里踏雪活动方案
- 展厅宠物活动方案
- 小红帽公司活动策划方案
- 山西省基础教育活动方案
- 布丁酒店活动方案
- 工作迎新活动方案
- 小学生居家游戏活动方案
- 小柴米充值活动方案
- 尽快落实活动方案
- 师生环保进社区活动方案
- 天台保安考试题及答案
- 招聘渠道ROI评估模型-洞察及研究
- 2025春季学期国开电大本科《人文英语4》一平台机考真题及答案(第六套)
- 第七单元1认识小数(课件)-三年级数学下册(人教版)
- 2025年河北省中考麒麟卷生物(二)及答案
- 2024年民族出版社招聘事业编制专业技术人员真题
- 2025年食品安全管理员考试试题及答案
- 2025-2030骨科植入器材产业市场深度分析及发展趋势与投资战略研究报告
- T/SHPTA 071.1-2023高压电缆附件用橡胶材料第1部分:绝缘橡胶材料
- 湖北省浠水县联考2025年七下数学期末质量检测试题含解析
- 生产基层管理培训课程
评论
0/150
提交评论