java算法.docx
- 文档编号:9848236
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:50
- 大小:34.38KB
java算法.docx
《java算法.docx》由会员分享,可在线阅读,更多相关《java算法.docx(50页珍藏版)》请在冰豆网上搜索。
java算法
Java经典算法
Java经典问题算法大全
/*【程序1】
题目:
古典问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析:
兔子的规律为数列1,1,2,3,5,8,13,21....
*/
package.flywater.FiftyAlgorthm;
publicclassFirstRabbit{
publicstaticfinalintMONTH=15;
publicstaticvoidmain(String[]args){
longf1=1L,f2=1L;
longf;
for(inti=3;i f=f2; f2=f1+f2; f1=f; System.out.print("第"+i+"个月的兔子对数: "); System.out.println(""+f2); } } } /*【程序2】 *作者若水飞天 题目: 判断101-200之间有多少个素数,并输出所有素数。 1.程序分析: 判断素数的方法: 用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 */ package.flywater.FiftyAlgorthm; publicclassSecondPrimeNumber{ publicstaticintcount=0; publicstaticvoidmain(String[]args){ for(inti=101;i<200;i++){ booleanb=true;//默认此数就素数 for(intj=2;j<=Math.sqrt(i);j++){ if(i%j==0){ b=false;//此数不是素数 break; } } if(b){ count++; System.out.print(i+""); } } System.out.println("\n素数的个数: "+count); } } /*【程序3】 作者若水飞天 题目: 打印出所有的"水仙花数(narcissusnumber)",所谓"水仙花数"是指一个三位数, 其各位数字立方和等于该数本身。 例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 1.程序分析: 利用for循环控制100-999个数,每个数分解出个位,十位,百位。 */ package.flywater.FiftyAlgorthm; publicclassThirdNarcissusNum{ staticintb,bb,bbb; publicstaticvoidmain(String[]args){ for(intnum=101;num<1000;num++){ ThirdNarcissusNumtnn=newThirdNarcissusNum(); tnn.f(num); } } publicvoidf(intm){ bbb=m/100; bb=(m%100)/10; b=(m%100)%10; if((bbb*bbb*bbb+bb*bb*bb+b*b*b)==m){ System.out.println(m); } } } /*【程序4】 作者若水飞天 题目: 将一个正整数分解质因数。 例如: 输入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的值,重复执行第一步。 */ package.flywater.FiftyAlgorthm; importjava.util.Scanner; publicclassFourthPrimeFactor{ staticintn,k=2; publicstaticvoidmain(String[]args){ Scanners=newScanner(System.in); n=s.nextInt(); System.out.print(n+"="); FourthPrimeFactorfpf=newFourthPrimeFactor(); fpf.f(n); } publicvoidf(intn){ while(k<=n){ if(k==n){ System.out.println(n); break; }elseif(n>k&&n%k==0){ System.out.print(k+"*"); n=n/k; f(n); break; }elseif(n>k&&n%k! =0){ k++; f(n); break; } } } } /*【程序5】 作者若水飞天 题目: 利用条件运算符的嵌套来完成此题: 学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 1.程序分析: (a>b)? a: b这是条件运算符的基本例子。 */ package.flywater.FiftyAlgorthm; importjava.util.Scanner; publicclassFifthCondition{ //publicstaticfinalintS1=90; //publicstaticfinalintS2=60; staticintgrade; publicstaticvoidmain(String[]args){ Scannerstr=newScanner(System.in); ints=str.nextInt(); FifthConditionfc=newFifthCondition(); grade=pare(s); if(grade==1){ System.out.print('A'); }elseif(grade==2){ System.out.print('B'); }else{ System.out.println('C'); } } publicintcompare(ints){ returns>90? 1 : s>60? 2 : 3; } } /*【程序6】 作者若水飞天 题目: 输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析: 利用辗除法。 */ /* *在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回 *较大的数,此数即为最小公约数,最小公倍数为两数之积除以最小公倍数。 **/ package.flywater.FiftyAlgorthm; importjava.util.Scanner; publicclassSixthCommonDiviser{ publicstaticvoidmain(String[]args){ inta,b; Scanners1=newScanner(System.in); Scanners2=newScanner(System.in); a=s1.nextInt(); b=s2.nextInt(); SixthCommonDiviserscd=newSixthCommonDiviser(); intm=scd.division(a,b); intn=a*b/m; System.out.println("最大公约数: "+m); System.out.println("最小公倍数: "+n); } publicintdivision(intx,inty){ intt; if(x t=x; x=y; y=t; } while(y! =0){ if(x==y)return1; else{ intk=x%y; x=y; y=k; } } returnx; } } /*【程序7】 作者若水飞天 题目: 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 1.程序分析: 利用while语句,条件为输入的字符不为'\n'.*/ package.flywater.FiftyAlgorthm; importjava.util.*; publicclassSeventhCharacterStatistics{ staticintdigital=0; staticintcharacter=0; staticintother=0; staticintblank=0; publicstaticvoidmain(String[]args){ char[]ch=null; Scannersc=newScanner(System.in); Strings=sc.nextLine(); ch=s.toCharArray(); for(inti=0;i if(ch[i]>='0'&&ch[i]<='9'){ digital++; }elseif((ch[i]>='a'&&ch[i]<='z')||ch[i]>'A'&&ch[i]<='Z'){ character++; }elseif(ch[i]==''){ blank++; }else{ other++; } } System.out.println("数字个数: "+digital); System.out.println("英文字母个数: "+character); System.out.println("空格个数: "+blank); System.out.println("其他字符个数: "+other); } } /*【程序8】 作者若水飞天 题目: 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 */ /* *算法: 定义一个变量b,赋初值为0;定义一变量sum,赋初值为0, *进入循环后,将a+b的值赋给b,将sum+b的值赋给sum; *同时,将a增加十倍,++i;继续循环; *循环结束后,输出sum的值。 */ package.flywater.FiftyAlgorthm; importjava.util.Scanner; publicclassEightPlus{ staticlonga=2,b=0; publicstaticvoidmain(String[]args){ Scanners=newScanner(System.in); intn=s.nextInt(); inti=0; longsum=0; while(i b=b+a; sum=sum+b; a=a*10; ++i; } System.out.println("inputnumber: "+n); System.out.println(sum); } } /*【程序9】 题目: 一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如6=1+2+3.编程找出1000以内的所有完数。 */ package.flywater.FiftyAlgorthm; publicclassNinthWanshu{ publicstaticvoidmain(String[]args){ System.out.println("1到1000的完数有: "); for(inti=1;i<1000;i++){ intt=0; for(intj=1;j<=i/2;j++){ if(i%j==0){ t=t+j; } } if(t==i){ System.out.print(i+""); } } } } /*【程序10】 作者若水飞天 题目: 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下, 求它在第10次落地时,共经过多少米? 第10次反弹多高? */ package.flywater.FiftyAlgorthm; publicclassTenthTreeFall{ staticdoubleheight=100; staticdoubledistance=100; publicstaticvoidmain(String[]args){ for(inti=1;i<10;i++){ distance=distance+height; height=height/2; } System.out.println("路程: "+distance); System.out.println("高度: "+height/2); } } /*【程序11】 *作者若水飞天 题目: 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数? 都是多少? 1.程序分析: 可填在百位、十位、个位的数字都是1、2、3、4。 组成所有的排列后再去掉不满足条件的排列。 */ /*算法: 3个for循环加一个if语句; * */ package.flywater.FiftyAlgorthm; publicclassEleventhNumberRange{ publicstaticvoidmain(String[]args){ intcount=0; for(intx=1;x<5;x++){ for(inty=1;y<5;y++){ for(intz=1;z<5;z++){ if(x! =y&&y! =z&&x! =z){ count++; System.out.print(x*100+y*10+z+" "); if(count%4==0){ System.out.println(); } } } } } System.out.println("共有"+count+"个三位数"); } } /*【程序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,求应发放奖金总数? 1.程序分析: 请利用数轴来分界,定位。 注意定义时需把奖金定义成长整型。 */ /*注意: 要精确到小数点后多少位,用DecimalFormatdf=newDecimalFormat("#0.0000"); * */ package.flywater.FiftyAlgorthm; importjava.text.DecimalFormat; importjava.util.*; publicclassTwelfthProfitAward{ staticdoubleprofit=0; staticdoubleaward=0; publicstaticvoidmain(String[]args){ Scanners=newScanner(System.in); profit=s.nextInt(); System.out.println("输入的利润是"+profit+"万"); if(profit>0&&profit<=10){ award=profit*0.1; }elseif(profit>10&&profit<=20){ award=10*0.1+(profit-10)*0.075; }elseif(profit>20&&profit<=40){ award=10*0.1+10*0.075+(profit-20)*0.05; }elseif(profit>40&&profit<=60){ award=10*0.1+10*0.075+20*0.05+(profit-40)*0.03; }elseif(profit>60&&profit<=100){ award=20*0.175+20*0.05+20*0.03+(profit-60)*0.015; }elseif(profit>100){ award=20*0.175+40*0.08+40*0.015+(profit-100)*0.01; } DecimalFormatdf=newDecimalFormat("#0.00000"); System.out.println("应该提取的奖金是"+df.format(award)+"万"); } } /*【程序13】 *作者若水飞天 题目: 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析: 在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方, 如果开方后的结果满足如下条件,即是结果。 请看具体分析: */ package.flywater.FiftyAlgorthm; publicclassThirteenthTwiceSqrt{ publicstaticvoidmain(String[]args){ for(longl=1L;l<100000;l++){ if(Math.sqrt((long)(l+100))%1==0){ if(Math.sqrt((long)(l+268))%1==0){ System.out.println(l+"加100是一个完全平方数,再加168又是一个完全平方数"); } } } } } *【程序14】 *作者若水飞天 题目: 输入某年某月某日,判断这一天是这一年的第几天? 1.程序分析: 以3月5日为例,应该先把前两个月的加起来, 然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。 */ package.flywater.FiftyAlgorthm; importjava.util.Scanner; importjava.io.*; publicclassFourteenthYearMonthDay{ publicstaticvoidmain(String[]args){ intyear,month,day; intdays=0; intd=0; FourteenthYearMonthDayfymd=newFourteenthYearMonthDay(); System.out.print("Inputtheyear: "); year=fymd.input(); System.out.print("Inputthemonth: "); month=fymd.input(); System.out.print("InputTheDay
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 算法