您好,欢迎访问三七文档
实验09:算法设计实验目的:1.掌握常用的查找算法2.掌握常用的排序算法3.掌握递归的应用实验数据记录及分析(或程序及运行结果)1.编写程序,从键盘上输入一个整数,判断该程序是否是素数,如果是在打印该数是素数,如果不是打印该数不是素数。importjava.util.*;publicclassSushu{publicstaticvoidmain(String[]args){intn,i;System.out.print(请随便输入一个数:);Scannersc=newScanner(System.in);n=sc.nextInt();for(i=2;in;i++){if(n%i==0)break;}if(n==i)System.out.println(n+是素数);elseSystem.out.println(n+不是素数);}}2.已有一个升序排列的整数数组(含20个整数),要求从键盘输入一个整数后,将该数插入数组,并保持升序,输出该数组的数值验证程序的正确性。importjava.util.*;publicclassShuzu{publicstaticvoidmain(String[]args){intx;inti,j;int[]a={5,11,21,31,41,51,61,71,81,91,110,121,124,134,156,163,167,178,179,189};Scannerreader=newScanner(System.in);System.out.print(请输入需要插入的一个整数:);x=reader.nextInt();int[]b=newint[21];for(i=0;i21;i++){if(xa[i])b[i]=a[i];elsebreak;}b[i]=x;for(j=i+1;j21;j++)b[j]=a[j-1];for(i=0;i21;i++)System.out.print(b[i]+);}}3.输出所有的水仙花数,所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身,例如,153=13+53+33。publicclassThirdNarcissusNum{staticintb,bb,bbb;publicstaticvoidmain(String[]args){for(intnum=101;num1000;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.分析程序,回答题后问题。publicclassBinarySearch{publicstaticvoidmain(String[]args){int[]r={5,13,19,21,37,56,64,75,80,88,92};intkey=56;intlow=0,high=r.length-1,mid=-1;while(low=high){mid=(low+high)/2;if(r[mid]==key){break;}if(r[mid]key)high=mid-1;elselow=mid+1;}if(lowhigh){System.out.println(notfound!);}else{System.out.println(foundat+mid);}}}1)当key=21时,写出每次循环low、high和mid以及运行输出结果的值第一次循环:Low=0,high=4,mid=5第二次循环:Low=3,high=4,mid=2第三次循环:Low=3,high=4,mid=3输出结果:foundat32)当key=22时,写出每次循环low、high和mid以及运行输出结果的值第一次循环:Low=0,high=4,mid=5第二次循环:Low=3,high=4,mid=2第三次循环:Low=4,high=4,mid=3第四次循环:Low=4,high=3,mid=4输出结果:notfound!3)当key=56时,写出每次循环low、high和mid以及运行输出结果的值Low=0,high=10,mid=5,输出结果:foundat54)当key=88时,写出每次循环low、high和mid以及运行输出结果的值第一次循环:Low=6,high=10,mid=5第二次循环:Low=9,high=10,mid=8第三次循环:Low=9,high=10,mid=9输出结果:foundat95.用递归的方法求201!n(即求1!+2!+3!+….+20!),了解递归的用法。publicclassJiecheng{publicstaticintdoFactorial(intn){if(n0){return-1;}if(n==0){return1;}elseif(n==1){return1;}else{returnn*doFactorial(n-1);}}publicstaticvoidmain(String[]args){intresult=0,n=20;for(inti=1;i=n;i++){result+=doFactorial(i);}System.out.println(result);}}6.MIT的几个朋友决定要参加马拉松比赛。他们的姓名和比赛用时如下:NameTime(minutes)Elena341Thomas273Hamilton278Suzie329Phil445Matt402Alex388Emma275John243James334Jane412Emily393Daniel299Neda343Aaron317Kate265问题:找出最快的运动员。打印出他们的姓名和他的时间(分钟为单位)。选项:找出次快的元动员。打印出他的姓名和时间参考:写一个方法以一个整数数组为参数,返回该数组中的最小值对应的下标索引值。调用此方法以下面的时间数组为参数,根据返回的索引找出姓名数组和时间数组中对应得元素,即跑的最快的人的姓名和对应时间。写第二个方法去查找第二快的队员。第二个方法使用第一个方法找出最快者,然后在剩下的元素中找出最快者即可。publicclassJavaApplication37{publicstaticvoidmain(String[]args){String[]names={Elena,Thomas,Hamilton,Suzie,Phil,Matt,Alex,Emma,John,James,Jane,Emily,Daniel,Neda,Aaron,Kate};int[]times={341,273,278,329,445,402,388,275,243,334,412,393,299,343,317,265};intminTime=100000;intindex=0;for(inti=0;itimes.length;i++){if(times[i]minTime){minTime=times[i];index=i;}}System.out.println(names[index]+:+minTime);}}评语:日期:年月日
本文标题:java-实验九
链接地址:https://www.777doc.com/doc-4882504 .html