烟台南山学院计算机与电气自动化学院java实训报告.docx
《烟台南山学院计算机与电气自动化学院java实训报告.docx》由会员分享,可在线阅读,更多相关《烟台南山学院计算机与电气自动化学院java实训报告.docx(30页珍藏版)》请在冰豆网上搜索。
烟台南山学院计算机与电气自动化学院java实训报告
烟台南山学院计算机与电气自动化学院
Java程序设计实训报告
(2011~2012)学年第2学期)
姓名:
******
学号:
****************
专业:
计算机科学
班级:
1001班
指导教师:
翟芸
编程课程实训报告
日期
2012.6.11——2012.6.15
地点
67号楼E305机房
项目名称
Java程序设计实训
实训目的能力目标
增强学生对java语言的熟悉,增强对java编程工具的熟悉掌握程度,为今后进一步深入学习java语言打下一个坚实的基础。
实训要求:
1、实训期间每天登记考勤,作为实训成绩的一部分。
2、实训期间不能玩游戏、看电影、小说等做与学习无关的事。
如果有不遵守的同学将取消当天成绩。
3、每天的作业必须经过指导教师检查后才可以登录当天成绩。
4、完成整个实训以后,要求每人写出实训报告。
作为评定整个实训成绩的重要参考依据。
实训内容(过程及步骤)
第一题:
古典问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析:
兔子的规律为数列1,1,2,3,5,8,13,21....
importjava.util.Scanner;
publicclassTuzi{
publicstaticvoidmain(Stringargs[]){
inta=1,b=1;//a大前一个月,b前一个月
intcount=1;//当月
System.out.print("请输入要求的月份");
Scannersc=newScanner(System.in);
intmounth=sc.nextInt();
//前两个月都是1
if(mounth>0&&mounth<=2)
System.out.println("兔子在"+mounth+"月有"+count+"只");
//3个月以后是当月的为前两个月的和,采用递推的方法算出结果
if(mounth>2)
{
for(inti=0;i{count=a+b;a=b;b=count;}System.out.println("兔子在"+mounth+"月有"+count+"只");}}}第二题:判断101-200之间有多少个素数,并输出所有素数。程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。publicclassSushu{publicstaticvoidmain(Stringargs[]){inti=101;booleantemp=true;//true表示是素数,先假设他是素数intcount=0;//一个累加器,控制换行for(;i<=200;i++){for(intt=2;t<=Math.sqrt(i);t++){//如果能被整除,则不是素数并且跳出循环if(i%t==0){temp=false;break;}}if(temp){System.out.print(i+"");count++;//四个数一行if(count%4==0)System.out.println();}temp=true;//一个数计算完毕,再次假设他是素数}}}第三题:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。publicclassShuixianhua{publicstaticvoidmain(Stringargs[]){intone,two,three;//one个位,two十位,three百位for(inti=100;i<1000;i++){one=i%10;two=(i/10)%10;three=i/100;if(i==(one*one*one+two*two*two+three*three*three))System.out.println(i);}}}第四题:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。importjava.util.Scanner;classZhishu{//判断是不是素数的一个构造方法publicbooleanzhishu(inttemp){booleana=true;//先假设他是素数for(inti=2;i<=Math.sqrt(temp);i++)if(temp%i==0){a=false;break;}//如果他能被整除了,那么他就不是素数,中断循环,得到结果returna;//返回结果}}classFenjie{publicstaticvoidmain(Stringargs[]){Zhishua=newZhishu();//输入计算的整数System.out.print("请输入要求的整数");Scannersc=newScanner(System.in);intnum=sc.nextInt();System.out.print("分解质因数后是"+num+"=");//若果他是质数,则输出它本身if(a.zhishu(num))System.out.println(num);//若果他不是质数,那么他肯定是有2个或者2个以上质因数for(inti=2;i<=Math.sqrt(num);i++)//循环找他的质因数{if(a.zhishu(i)&&(num%i==0))//和循环一起构成找他的质因数{System.out.print(i);//输出第一个最小质因数if(i!=num)//若果他不等于要求的最终数字,那么他就被他自身整除当前质因数的结果代替{num=num/i;System.out.print("*");}//由于还没有输出完毕,当然最后还需要输出一个*号;i--;//可能他还能被这个质因数整除,所以i--继续计算;}}System.out.print(num);//经过被质因数连续整除后,他便成了最后一个质因数,当然还得输出他}}第五题:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。程序分析:(a>b)?a:b这是条件运算符的基本例子。importjava.util.Scanner;publicclassChengji{publicstaticvoidmain(Stringargs[]){System.out.print("请输入要计算的成绩");Scannersc=newScanner(System.in);intgrade=sc.nextInt();//(a>b)?c:d把d替换成要继续嵌套的算式System.out.println("他的成绩是"+((grade>=90)?'A':(grade>=60)?'B':'C'));}}第六题:题目:输入两个正整数m和n,求其最大公约数和最小公倍数。程序分析:利用辗除法。importjava.util.Scanner;classRun{privateintmax,min;//初始化,分别把最小值和最大值区分开Run(intmax,intmin){if(max{this.max=min;this.min=max;}else{this.max=max;this.min=min;}}//求最大公约数publicintgetMax(){inttemp=1;intmax,min;max=this.max;min=this.min;while(temp!=0){temp=max%min;max=min;min=temp;}returnmax;}//求出最小公倍数publicintgetMin(){intmin=this.min;min=this.max*this.min/getMax();returnmin;}}publicclassMax{publicstaticvoidmain(Stringargs[]){System.out.print("请输入第一个整数");Scannersc=newScanner(System.in);intone=sc.nextInt();System.out.print("请输入第二个整数");inttwo=sc.nextInt();Runa=newRun(one,two);System.out.println("最大公约数是"+a.getMax()+"\n最小公倍数是"+a.getMin());}}第七题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?publicclassQiu{publicstaticvoidmain(Stringargs[]){doublea=100;doublesum=a;for(inti=1;i<10;i++){sum+=a;a=a/2;}System.out.print("经过"+sum+"米,高度为"+a/2+"米");}}第八题:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。publicclassPai{publicstaticvoidmain(Stringargs[]){intcount=0;for(inta=1;a<5;a++)for(intb=1;b<5;b++)for(intc=1;c<5;c++)for(intd=1;d<5;d++){if(a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&c!=d)count++;}System.out.print("共有"+count+"种排法");}}第九题:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:publicclassZhao{publicstaticvoidmain(Stringargs[]){inta,b;for(inti=0;i<=100000;i++){a=(int)Math.sqrt(i+100);b=(int)Math.sqrt(i+268);if(a*a==i+100&&b*b==i+268)System.out.print(i+"");}}}第十题:输入某年某月某日,判断这一天是这一年的第几天?1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。importjava.util.Scanner;classJsuan{privateinty,m,d,two,sum;//年月日,二月,总和;Jsuan(inty,intm,intd){this.y=y;this.m=m;this.d=d;run();}//闰年计算voidrun(){if(y%400==0)two=1;elseif(y%100!=0&&y%4==0)two=1;}//去掉当月之后再计算intbegin(){for(inti=m-1;i>0;i--){if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)sum+=31;if(i==4||i==6||i==9||i==11)sum+=30;if(i==2)sum+=28+two;}returnsum+d;}}publicclassDiji{publicstaticvoidmain(Stringargs[]){System.out.println("输入年");Scannersc=newScanner(System.in);inty=sc.nextInt();System.out.println("输入月");intm=sc.nextInt();System.out.println("输入日");intd=sc.nextInt();Jsuana=newJsuan(y,m,d);System.out.println("这是第"+a.begin()+"天");}}第十一题:题目:输入三个整数x,y,z,请把这三个数由小到大输出。1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。importjava.util.Scanner;classRun{publicintone,two,three;inttemp;Run(){System.out.println("输入第一个数");Scannersc=newScanner(System.in);one=sc.nextInt();System.out.println("输入第二个数");two=sc.nextInt();System.out.println("输入第三个数");three=sc.nextInt();if(one>two)temp=one;one=two;two=temp;if(one>three)temp=one;one=three;three=temp;if(two>three)temp=two;two=three;three=temp;System.out.println(one+"<"+two+"<"+three);}}classPaixu{publicstaticvoidmain(Stringargs[]){Runa=newRun();}}第十二题:输出9*9口诀。1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。publicclassJ6{publicstaticvoidmain(Stringargs[]){for(inti=1;i<10;i++){for(intj=1;j<=i;j++)System.out.print(j+"×"+i+"="+j*i+"");System.out.println();}}}第十三题:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。程序分析:采取逆向思维的方法,从后往前推断。publicclassHou{publicstaticvoidmain(Stringargs[]){intsum=1;for(intday=10;day>1;day--){sum=++sum*2;}System.out.println("总共摘了"+sum+"个桃子");}}第十四题:题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。classRun{publicStringshow(intx){if(x==0)return"和x比";if(x==1)return"和y比";if(x==2)return"和z比";return"";}}publicclassTest28{publicstaticvoidmain(Stringargs[]){Runp=newRun();for(inta=0;a<3;a++)for(intb=0;b<2;b++)for(intc=0;c<3;c++)if(a!=b&&b!=c&&a!=c&&a!=0&&c!=0&&c!=2)System.out.print("a"+p.show(a)+"b"+p.show(b)+"c"+p.show(c));}}第十五题:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。程序分析:请抓住分子与分母的变化规律。publicclassF10{publicstaticvoidmain(Stringargs[]){doublea=2,b=3,c;doublex=1,y=2,z;doublesum=0;sum=a/x+b/y;for(inti=3;i<=20;i++){c=a+b;a=b;b=c;z=x+y;x=y;y=z;sum+=c/z;}System.out.println(sum);}}第十六题:求1+2!+3!+...+20!的和程序分析:此程序只是把累加变成了累乘。publicclassJie{publicstaticvoidmain(Stringargs[]){longsum=0;longcount=1;for(inti=1;i<=20;i++){count*=i;//当前阶乘值//System.out.println("!"+i+"="+count);sum+=count;//当前和//System.out.println("sum="+sum);}System.out.println("sum="+sum);}}第十七题:利用递归方法求5!。程序分析:递归公式:fn=fn_1*4!classRun{longrun(longx){if(x>1)returnx*run(x-1);elsereturnx;}Run(longn){System.out.print(n+"!="+run(n));}}publicclassDitui{publicstaticvoidmain(Stringargs[]){Runa=newRun(5);}}第十八题:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?publicclassW3{publicstaticvoidmain(Stringargs[]){inta=10;for(inti=1;i<=4;i++){a+=2;}System.out.println(a+"岁");}}第十九题:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。importjava.util.Scanner;classRun{intwei;privateintx;//求位数voidW(intx){intcount=0;for(;x>0;x/=10)count++;wei=count;}//用连除法球逆序输出voidNi(){intwei=this.wei;for(;wei>0;wei--){System.out.print(x%10);x/=10;}}Run(intx){this.x=x;W(x);}}publicclassTest34{publicstaticvoidmain(Stringargs[]){System.out.print("请输入要求的五位以内正整数");Scannersc=newScanner(System.in);intnum=sc.nextInt();Runa=newRun(num);System.out.println("它共有"+a.wei+"位数");System.out.print("逆序输出为");a.Ni();System.out.println();}}第二十题:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。importjava.util.Scanner;classRun{Run(intx){if(x%10==x/10
count=a+b;
a=b;
b=count;
}
第二题:
判断101-200之间有多少个素数,并输出所有素数。
判断素数的方法:
用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
publicclassSushu{
inti=101;
booleantemp=true;//true表示是素数,先假设他是素数
intcount=0;//一个累加器,控制换行
for(;i<=200;i++)
for(intt=2;t<=Math.sqrt(i);t++)
//如果能被整除,则不是素数并且跳出循环
if(i%t==0)
{temp=false;break;}
if(temp)
System.out.print(i+"");
count++;
//四个数一行
if(count%4==0)
System.out.println();
temp=true;//一个数计算完毕,再次假设他是素数
第三题:
打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如:
153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
利用for循环控制100-999个数,每个数分解出个位,十位,百位。
publicclassShuixianhua{
intone,two,three;
//one个位,two十位,three百位
for(inti=100;i<1000;i++)
one=i%10;
two=(i/10)%10;
three=i/100;
if(i==(one*one*one+two*two*two+three*three*three))
System.out.println(i);
第四题:
将一个正整数分解质因数。
输入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的值,重复执行第一步。
classZhishu{
//判断是不是素数的一个构造方法
publicbooleanzhishu(inttemp){
booleana=true;//先假设他是素数
for(inti=2;i<=Math.sqrt(temp);i++)
if(temp%i==0)
{a=false;break;}//如果他能被整除了,那么他就不是素数,中断循环,得到结果
returna;//返回结果
classFenjie{
Zhishua=newZhishu();
//输入计算的整数
System.out.print("请输入要求的整数");
intnum=sc.nextInt();
System.out.print("分解质因数后是"+num+"=");
//若果他是质数,则输出它本身
if(a.zhishu(num))
System.out.println(num);
//若果他不是质数,那么他肯定是有2个或者2个以上质因数
for(inti=2;i<=Math.sqrt(num);i++)//循环找他的质因数
if(a.zhishu(i)&&(num%i==0))//和循环一起构成找他的质因数
System.out.print(i);//输出第一个最小质因数
if(i!
=num)
//若果他不等于要求的最终数字,那么他就被他自身整除当前质因数的结果代替
{num=num/i;System.out.print("*");}
//由于还没有输出完毕,当然最后还需要输出一个*号;
i--;//可能他还能被这个质因数整除,所以i--继续计算;
System.out.print(num);
//经过被质因数连续整除后,他便成了最后一个质因数,当然还得输出他
第五题:
利用条件运算符的嵌套来完成此题:
学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
(a>b)?
a:
b这是条件运算符的基本例子。
publicclassChengji{
System.out.print("请输入要计算的成绩");
intgrade=sc.nextInt();
//(a>b)?
c:
d把d替换成要继续嵌套的算式
System.out.println("他的成绩是"+((grade>=90)?
'A':
(grade>=60)?
'B':
'C'));
第六题:
题目:
输入两个正整数m和n,求其最大公约数和最小公倍数。
利用辗除法。
classRun{
privateintmax,min;
//初始化,分别把最小值和最大值区分开
Run(intmax,intmin){
if(max{this.max=min;this.min=max;}else{this.max=max;this.min=min;}}//求最大公约数publicintgetMax(){inttemp=1;intmax,min;max=this.max;min=this.min;while(temp!=0){temp=max%min;max=min;min=temp;}returnmax;}//求出最小公倍数publicintgetMin(){intmin=this.min;min=this.max*this.min/getMax();returnmin;}}publicclassMax{publicstaticvoidmain(Stringargs[]){System.out.print("请输入第一个整数");Scannersc=newScanner(System.in);intone=sc.nextInt();System.out.print("请输入第二个整数");inttwo=sc.nextInt();Runa=newRun(one,two);System.out.println("最大公约数是"+a.getMax()+"\n最小公倍数是"+a.getMin());}}第七题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?publicclassQiu{publicstaticvoidmain(Stringargs[]){doublea=100;doublesum=a;for(inti=1;i<10;i++){sum+=a;a=a/2;}System.out.print("经过"+sum+"米,高度为"+a/2+"米");}}第八题:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。publicclassPai{publicstaticvoidmain(Stringargs[]){intcount=0;for(inta=1;a<5;a++)for(intb=1;b<5;b++)for(intc=1;c<5;c++)for(intd=1;d<5;d++){if(a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&c!=d)count++;}System.out.print("共有"+count+"种排法");}}第九题:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:publicclassZhao{publicstaticvoidmain(Stringargs[]){inta,b;for(inti=0;i<=100000;i++){a=(int)Math.sqrt(i+100);b=(int)Math.sqrt(i+268);if(a*a==i+100&&b*b==i+268)System.out.print(i+"");}}}第十题:输入某年某月某日,判断这一天是这一年的第几天?1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。importjava.util.Scanner;classJsuan{privateinty,m,d,two,sum;//年月日,二月,总和;Jsuan(inty,intm,intd){this.y=y;this.m=m;this.d=d;run();}//闰年计算voidrun(){if(y%400==0)two=1;elseif(y%100!=0&&y%4==0)two=1;}//去掉当月之后再计算intbegin(){for(inti=m-1;i>0;i--){if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)sum+=31;if(i==4||i==6||i==9||i==11)sum+=30;if(i==2)sum+=28+two;}returnsum+d;}}publicclassDiji{publicstaticvoidmain(Stringargs[]){System.out.println("输入年");Scannersc=newScanner(System.in);inty=sc.nextInt();System.out.println("输入月");intm=sc.nextInt();System.out.println("输入日");intd=sc.nextInt();Jsuana=newJsuan(y,m,d);System.out.println("这是第"+a.begin()+"天");}}第十一题:题目:输入三个整数x,y,z,请把这三个数由小到大输出。1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。importjava.util.Scanner;classRun{publicintone,two,three;inttemp;Run(){System.out.println("输入第一个数");Scannersc=newScanner(System.in);one=sc.nextInt();System.out.println("输入第二个数");two=sc.nextInt();System.out.println("输入第三个数");three=sc.nextInt();if(one>two)temp=one;one=two;two=temp;if(one>three)temp=one;one=three;three=temp;if(two>three)temp=two;two=three;three=temp;System.out.println(one+"<"+two+"<"+three);}}classPaixu{publicstaticvoidmain(Stringargs[]){Runa=newRun();}}第十二题:输出9*9口诀。1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。publicclassJ6{publicstaticvoidmain(Stringargs[]){for(inti=1;i<10;i++){for(intj=1;j<=i;j++)System.out.print(j+"×"+i+"="+j*i+"");System.out.println();}}}第十三题:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。程序分析:采取逆向思维的方法,从后往前推断。publicclassHou{publicstaticvoidmain(Stringargs[]){intsum=1;for(intday=10;day>1;day--){sum=++sum*2;}System.out.println("总共摘了"+sum+"个桃子");}}第十四题:题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。classRun{publicStringshow(intx){if(x==0)return"和x比";if(x==1)return"和y比";if(x==2)return"和z比";return"";}}publicclassTest28{publicstaticvoidmain(Stringargs[]){Runp=newRun();for(inta=0;a<3;a++)for(intb=0;b<2;b++)for(intc=0;c<3;c++)if(a!=b&&b!=c&&a!=c&&a!=0&&c!=0&&c!=2)System.out.print("a"+p.show(a)+"b"+p.show(b)+"c"+p.show(c));}}第十五题:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。程序分析:请抓住分子与分母的变化规律。publicclassF10{publicstaticvoidmain(Stringargs[]){doublea=2,b=3,c;doublex=1,y=2,z;doublesum=0;sum=a/x+b/y;for(inti=3;i<=20;i++){c=a+b;a=b;b=c;z=x+y;x=y;y=z;sum+=c/z;}System.out.println(sum);}}第十六题:求1+2!+3!+...+20!的和程序分析:此程序只是把累加变成了累乘。publicclassJie{publicstaticvoidmain(Stringargs[]){longsum=0;longcount=1;for(inti=1;i<=20;i++){count*=i;//当前阶乘值//System.out.println("!"+i+"="+count);sum+=count;//当前和//System.out.println("sum="+sum);}System.out.println("sum="+sum);}}第十七题:利用递归方法求5!。程序分析:递归公式:fn=fn_1*4!classRun{longrun(longx){if(x>1)returnx*run(x-1);elsereturnx;}Run(longn){System.out.print(n+"!="+run(n));}}publicclassDitui{publicstaticvoidmain(Stringargs[]){Runa=newRun(5);}}第十八题:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?publicclassW3{publicstaticvoidmain(Stringargs[]){inta=10;for(inti=1;i<=4;i++){a+=2;}System.out.println(a+"岁");}}第十九题:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。importjava.util.Scanner;classRun{intwei;privateintx;//求位数voidW(intx){intcount=0;for(;x>0;x/=10)count++;wei=count;}//用连除法球逆序输出voidNi(){intwei=this.wei;for(;wei>0;wei--){System.out.print(x%10);x/=10;}}Run(intx){this.x=x;W(x);}}publicclassTest34{publicstaticvoidmain(Stringargs[]){System.out.print("请输入要求的五位以内正整数");Scannersc=newScanner(System.in);intnum=sc.nextInt();Runa=newRun(num);System.out.println("它共有"+a.wei+"位数");System.out.print("逆序输出为");a.Ni();System.out.println();}}第二十题:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。importjava.util.Scanner;classRun{Run(intx){if(x%10==x/10
{this.max=min;this.min=max;}
else
{this.max=max;this.min=min;}
//求最大公约数
publicintgetMax(){
inttemp=1;
intmax,min;
max=this.max;min=this.min;
while(temp!
=0){
temp=max%min;
max=min;min=temp;
returnmax;
//求出最小公倍数
publicintgetMin(){
intmin=this.min;
min=this.max*this.min/getMax();
returnmin;
publicclassMax{
System.out.print("请输入第一个整数");
intone=sc.nextInt();
System.out.print("请输入第二个整数");
inttwo=sc.nextInt();
Runa=newRun(one,two);
System.out.println("最大公约数是"+a.getMax()+"\n最小公倍数是"+a.getMin());
第七题:
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?
第10次反弹多高?
publicclassQiu{
doublea=100;
doublesum=a;
for(inti=1;i<10;i++)
{sum+=a;a=a/2;}
System.out.print("经过"+sum+"米,高度为"+a/2+"米");
第八题:
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
1.程序分析:
可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
publicclassPai{
intcount=0;
for(inta=1;a<5;a++)
for(intb=1;b<5;b++)
for(intc=1;c<5;c++)
for(intd=1;d<5;d++)
if(a!
=b&&a!
=c&&a!
=d&&b!
=c&&b!
=d&&c!
=d)
System.out.print("共有"+count+"种排法");
第九题:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
请看具体分析:
publicclassZhao{
inta,b;
for(inti=0;i<=100000;i++)
a=(int)Math.sqrt(i+100);
b=(int)Math.sqrt(i+268);
if(a*a==i+100&&b*b==i+268)
第十题:
输入某年某月某日,判断这一天是这一年的第几天?
以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
classJsuan{
privateinty,m,d,two,sum;//年月日,二月,总和;
Jsuan(inty,intm,intd){
this.y=y;
this.m=m;
this.d=d;
run();
//闰年计算
voidrun(){
if(y%400==0)
two=1;
elseif(y%100!
=0&&y%4==0)
//去掉当月之后再计算
intbegin(){
for(inti=m-1;i>0;i--)
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
sum+=31;
if(i==4||i==6||i==9||i==11)
sum+=30;
if(i==2)
sum+=28+two;
returnsum+d;
publicclassDiji{
System.out.println("输入年");
inty=sc.nextInt();
System.out.println("输入月");
intm=sc.nextInt();
System.out.println("输入日");
intd=sc.nextInt();
Jsuana=newJsuan(y,m,d);
System.out.println("这是第"+a.begin()+"天");
第十一题:
输入三个整数x,y,z,请把这三个数由小到大输出。
我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
publicintone,two,three;
inttemp;
Run(){
System.out.println("输入第一个数");
one=sc.nextInt();
System.out.println("输入第二个数");
two=sc.nextInt();
System.out.println("输入第三个数");
three=sc.nextInt();
if(one>two)
temp=one;one=two;two=temp;
if(one>three)
temp=one;one=three;three=temp;
if(two>three)
temp=two;two=three;three=temp;
System.out.println(one+"<"+two+"<"+three);
classPaixu{
Runa=newRun();
第十二题:
输出9*9口诀。
分行与列考虑,共9行9列,i控制行,j控制列。
publicclassJ6{
for(intj=1;j<=i;j++)
System.out.print(j+"×"+i+"="+j*i+"");
第十三题:
猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
采取逆向思维的方法,从后往前推断。
publicclassHou{
intsum=1;
for(intday=10;day>1;day--){
sum=++sum*2;
System.out.println("总共摘了"+sum+"个桃子");
第十四题:
两个乒乓球队进行比赛,各出三人。
甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。
有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
publicStringshow(intx){
if(x==0)
return"和x比";
if(x==1)
return"和y比";
if(x==2)
return"和z比";
return"";
publicclassTest28{
Runp=newRun();
for(inta=0;a<3;a++)
for(intb=0;b<2;b++)
for(intc=0;c<3;c++)
=b&&b!
=0&&c!
=2)
System.out.print("a"+p.show(a)+"b"+p.show(b)+"c"+p.show(c));
第十五题:
有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
请抓住分子与分母的变化规律。
publicclassF10{
doublea=2,b=3,c;
doublex=1,y=2,z;
doublesum=0;
sum=a/x+b/y;
for(inti=3;i<=20;i++)
c=a+b;a=b;b=c;
z=x+y;x=y;y=z;
sum+=c/z;
System.out.println(sum);
第十六题:
求1+2!
+3!
+...+20!
的和
此程序只是把累加变成了累乘。
publicclassJie{
longsum=0;
longcount=1;
for(inti=1;i<=20;i++)
count*=i;//当前阶乘值
//System.out.println("!
"+i+"="+count);
sum+=count;//当前和
//System.out.println("sum="+sum);
System.out.println("sum="+sum);
第十七题:
利用递归方法求5!
。
递归公式:
fn=fn_1*4!
longrun(longx){
if(x>1)
returnx*run(x-1);
returnx;
Run(longn){
System.out.print(n+"!
="+run(n));
publicclassDitui{
publicstaticvoidmain(Stringargs[])
Runa=newRun(5);
第十八题:
有5个人坐在一起,问第五个人多少岁?
他说比第4个人大2岁。
问第4个人岁数,他说比第3个人大2岁。
问第三个人,又说比第2人大两岁。
问第2个人,说比第一个人大两岁。
最后问第一个人,他说是10岁。
请问第五个人多大?
publicclassW3{
inta=10;
for(inti=1;i<=4;i++)
a+=2;
System.out.println(a+"岁");
第十九题:
给一个不多于5位的正整数,要求:
一、求它是几位数,二、逆序打印出各位数字。
intwei;
privateintx;
//求位数
voidW(intx){
for(;x>0;x/=10)
wei=count;
//用连除法球逆序输出
voidNi(){
intwei=this.wei;
for(;wei>0;wei--)
System.out.print(x%10);
x/=10;
Run(intx){
this.x=x;
W(x);
publicclassTest34{
System.out.print("请输入要求的五位以内正整数");
Runa=newRun(num);
System.out.println("它共有"+a.wei+"位数");
System.out.print("逆序输出为");
a.Ni();
第二十题:
一个5位数,判断它是不是回文数。
即12321是回文数,个位与万位相同,十位与千位相同。
if(x%10==x/10
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1