Java经典逻辑编程50题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Java经典逻辑编程50题【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1)程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....(斐波那契数列)2)参考代码importjava.util.Scanner;publicclassRabbitNum{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);System.out.println(你想知道前几个月的兔子的数量);intmonth=in.nextInt();int[]mon=newint[month];if(month3){System.out.println(第+month+个月有1对兔子,共2只);}else{for(inti=2;imonth;i++){mon[0]=mon[1]=1;mon[i]=mon[i-1]+mon[i-2];System.out.printf(第%d个月有%d对兔子,共%d只兔子\n,i+1,mon[i],2*mon[i]);}}}【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。1)程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。(java.lang.Math.sqrt(doublea)返回正确舍入的一个double值的正平方根)2)参考代码publicclassPrime{publicstaticvoidmain(String[]args){System.out.print(101--200中的素数有:);for(inti=101;i=200;i++){if(isPrime(i))System.out.print(+i);}}//isPrime方法用来判断一个数是否是素数privatestaticbooleanisPrime(inti){for(intj=2;j=Math.sqrt(i);j++){if(i%j==0)returnfalse;}returntrue;}}【程序3】题目:打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个水仙花数,因为153=1的三次方+5的三次方+3的三次方。1)程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。2)参考代码publicclassNarcissisticNum{publicstaticvoidmain(String[]args){System.out.print(水仙花数有:);for(intnum=100;num1000;num++){if(isNarcissisticNum(num))System.out.println(+num);}}//一个判断正整数是否为水仙花数的方法privatestaticbooleanisNarcissisticNum(intnum){//TODOAuto-generatedmethodstubinta=num/100;//分离出百位aintb=(num/10)%10;//分离出十位bintc=num%10;//分离出个位cintsum=a*a*a+b*b*b+c*c*c;if(sum==num)returntrue;elsereturnfalse;}}【程序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.util.Scanner;publicclassPrimeFactorOfInteger{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.println(请输入一个大于3的正整数);intnum=input.nextInt();System.out.print(num+的素因数:);factor(num);}privatestaticvoidfactor(intnum){for(inti=2;i=Math.sqrt(num);i++){if(num%i==0){System.out.print(i+*);if(isPrime(num/i)){System.out.println(num/i);}elsefactor(num/i);break;}}}privatestaticbooleanisPrime(inti){for(intj=2;j=Math.sqrt(i);j++){if(i%j==0)returnfalse;}returntrue;}}【程序5】题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。1.程序分析:(ab)?a:b这是条件运算符的基本例子。参考代码importjava.util.Scanner;publicclassConditionalOperator{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);System.out.println(请输入你的分数);intscore=in.nextInt();if(score=90){System.out.println(A恭喜);}elseif(score=60){System.out.println(B不错);}else{System.out.println(C加油);}}}【程序6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。1.程序分析:利用辗除法。参考代码importjava.util.Scanner;publicclassExample6{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);System.out.println(请输入第一个数);inta=in.nextInt();System.out.println(请输入第二个数);intb=in.nextInt();System.out.println(这两个数的最大公约数是+MaxCommonDivisor(a,b));System.out.println(这两个数的最小公倍数是+MinCommonMultiple(a,b));}privatestaticintMaxCommonDivisor(inta,intb){if(ab){inttemp=a;a=b;b=temp;}while(a%b!=0){inttemp=a%b;a=b;b=temp;}returnb;}privatestaticintMinCommonMultiple(inta,intb){returna*b/MaxCommonDivisor(a,b);}}【程序7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。1.程序分析:利用while语句,条件为输入的字符不为'\n'.参考代码importjava.util.Scanner;publicclassStatistic{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);System.out.println(Inputonesentance.);Strings=in.nextLine();intletter=0,symbol=0,space=0,number=0;char[]strArray=s.toCharArray();for(inti=0;istrArray.length;i++){charc=strArray[i];if(('a'=c&&c='z')||('A'=c&&c='Z'))letter++;elseif(48=c&&c=57)//注意!数字0-9的ASCII码是48-57number++;elseif(c=='')space++;elsesymbol++;}System.out.println(Thissentancehave+letter+letters,);System.out.println(have+number+numbers,);System.out.println(have+space+spaces,+and+symbol+symbols.);}}【程序8】题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。1.程序分析:关键是计算出每一项的值。参考代码importjava.util.Scanner;publicclassExample8{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.println(请输入相加的基数);intn=input.nextInt();System.out.println(请输入要相加的个数);inti=input.nextInt();longtotal=0L;longtemp=n;for(intj=0;ji;j++){total+=temp;temp=temp*10+n;}System.out.println(和为+total);}}【程序9】题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=1+2+3.编程找出1000以内的所有完数。参考代码publicclassWholeNumber{publicstaticvoidmain(String[]args){System.out.println(1000以内的完数有:);for(intnum=1;num1000;num++){isWholeNumber(num);}}privatestaticvoidisWholeNumber(intnum){intsum=0;for(inti=1;i=num/2;i++){if(num%i==0){sum+=i;}}if(sum==num)System.out.println(num);}}【程序10】题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?1:注意弹球一上一下的距离2:参考代码importjava.util.Scanner;publicclassPinball{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);System.out.println(请输入原始高度。);doubles=in.nextDouble();System.out.println(要求第几次落地后的距离。);intn=in.nextInt();doubletotal=s;System.out.printf(第%d次落地后共走的距离是:,n);if(n==1){System.out.println(total);System.out.printf(第%d次反弹的距离是%f。,n,s/2);}else{for(inti=1;in;i++)

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功