欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    java经典算法40例2.pdf

    • 资源ID:76248305       资源大小:39.74KB        全文页数:31页
    • 资源格式: PDF        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    java经典算法40例2.pdf

    【程序 1】题目:古典问题:有一对兔子,从出生后第3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?/这是一个菲波拉契数列问题public class lianxi01 public static void main(String args)System.out.println(第 1 个月的兔子对数:1);System.out.println(第 2 个月的兔子对数:1);int f1=1,f2=1,f,M=24;for(int i=3;i=M;i+)f=f2;f2=f1+f2;f1=f;System.out.println(第+i+个月的兔子对数:+f2);【程序 2】题目:判断101-200 之间有多少个素数,并输出所有素数。程序分析:判断素数的方法:用一个数分别去除2 到 sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。public class lianxi02 public static void main(String args)int count=0;for(int i=101;i200;i+=2)boolean b=false;for(int j=2;j=Math.sqrt(i);j+)if(i%j=0)b=false;break;else b=true;if(b=true)count+;System.out.println(i);System.out.println(素数个数是:+count);【程序 3】题目:打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:153 是一个水仙花数,因为153=1 的三次方 5 的三次方 3 的三次方。public class lianxi03 public static void main(String args)int b1,b2,b3;for(int m=101;m1000;m+)b3=m/100;b2=m%100/10;b1=m%10;if(b3*b3*b3+b2*b2*b2+b1*b1*b1)=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 的值,重复执行第一步。import java.util.*;public class lianxi04 public static void main(String args)Scanner s=new Scanner(System.in);System.out.print(请键入一个正整数:);int n =s.nextInt();int k=2;System.out.print(n+=);while(k =90 分的同学用A 表示,60-89 分之间的用 B 表示,60 分以下的用C 表示。import java.util.*;public class lianxi05 public static void main(String args)int x;char grade;Scanner s=new Scanner(System.in);System.out.print(请输入一个成绩:);x=s.nextInt();grade=x=90?A:x=60?B:C;System.out.println(等级为:+grade);【程序 6】题目:输入两个正整数m 和 n,求其最大公约数和最小公倍数。/*在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。*/import java.util.*;public class lianxi06 public static void main(String args)int a,b,m;Scanner s=new Scanner(System.in);System.out.print(键入一个整数:);a=s.nextInt();System.out.print(再键入一个整数:);b=s.nextInt();deff cd=new deff();m=cd.deff(a,b);int n=a*b/m;System.out.println(最大公约数:+m);System.out.println(最小公倍数:+n);class deff public int deff(int x,int y)int t;if(x y)t=x;x=y;y=t;while(y!=0)if(x=y)return x;else int k=x%y;x=y;y=k;return x;【程序 7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。import java.util.*;public class lianxi07 public static void main(String args)int digital=0;int character=0;int other=0;int blank=0;char ch=null;Scanner sc=new Scanner(System.in);String s=sc.nextLine();ch=s.toCharArray();for(int i=0;i=0&ch=a&ch A&ch=Z)character+;else if(ch=)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 个数相加),几个数相加有键盘控制。import java.util.*;public class lianxi08 public static void main(String args)long a,b=0,sum=0;Scanner s=new Scanner(System.in);System.out.print(输入数字a 的值:);a=s.nextInt();System.out.print(输入相加的项数:);int n=s.nextInt();int i=0;while(i n)b=b+a;sum=sum+b;a=a*10;+i;System.out.println(sum);【程序 9】题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=12 3.编程找出 1000 以内的所有完数。public class lianxi09 public static void main(String args)System.out.println(1 到 1000 的完数有:);for(int i=1;i1000;i+)int t=0;for(int j=1;j=i/2;j+)if(i%j=0)t=t+j;if(t=i)System.out.print(i+);【程序 10】题目:一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10 次落地时,共经过多少米?第10 次反弹多高?public class lianxi10 public static void main(String args)double h=100,s=100;for(int i=1;i10;i+)s=s+h;h=h/2;System.out.println(经过路程:+s);System.out.println(反弹高度:+h/2);【程序 11】题目:有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?public class lianxi11 public static void main(String args)int count=0;for(int x=1;x5;x+)for(int y=1;y5;y+)for(int z=1;z 0&x 10&x 20&x 40&x 60&x 100)y=20*0.175+40*0.08+40*0.015+(x-100)*0.01;System.out.println(应该提取的奖金是+y+万);【程序 13】题目:一个整数,它加上100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?public class lianxi13 public static void main(String args)for(int x=1;x100000;x+)if(Math.sqrt(x+100)%1=0)if(Math.sqrt(x+268)%1=0)System.out.println(x+加 100 是一个完全平方数,再加168 又是一个完全平方数);/*按题意循环应该从-100 开始(整数包括正整数、负整数、零),这样会多一个满足条件的数-99。但是我看到大部分人解这道题目时都把题中的“整数”理解成正整数,我也就随大流了。*/【程序 14】题目:输入某年某月某日,判断这一天是这一年的第几天?import java.util.*;public class lianxi14 public static void main(String args)int year,month,day;int days=0;int d=0;int e;input fymd=new input();do e=0;System.out.print(输入年:);year=fymd.input();System.out.print(输入月:);month=fymd.input();System.out.print(输入天:);day=fymd.input();if(year 0|month 12|day 31)System.out.println(输入错误,请重新输入!);e=1;while(e=1);for(int i=1;i y)int t=x;x=y;y=t;if(x z)int t=x;x=z;z=t;if(y z)int t=y;y=z;z=t;System.out.println(三个数字由小到大排列为:+x+y+z);class input public int input()int value=0;Scanner s=new Scanner(System.in);value=s.nextInt();return value;【程序 16】题目:输出9*9 口诀。public class lianxi16 public static void main(String args)for(int i=1;i10;i+)for(int j=1;j=i;j+)System.out.print(j+*+i+=+j*i+);if(j*i10)System.out.print();System.out.println();【程序 17】题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。public class lianxi17 public static void main(String args)int x=1;for(int i=2;i=10;i+)x=(x+1)*2;System.out.println(猴子第一天摘了+x+个桃子);【程序 18】题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c 三人,乙队为x,y,z 三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a 说他不和x 比,c 说他不和x,z 比,请编程序找出三队赛手的名单。public class lianxi18 static char m=a,b,c;static char n=x,y,z;public static void main(String args)for(int i=0;i m.length;i+)for(int j=0;j n.length;j+)if(mi=a&nj=x)continue;else if(mi=a&nj=y)continue;else if(mi=c&nj=x)|(mi=c&nj=z)continue;else if(mi=b&nj=z)|(mi=b&nj=y)continue;else System.out.println(mi+vs +nj);【程序 19】题目:打印出如下图案(菱形)*public class lianxi19 public static void main(String args)int H=7,W=7;/高和宽必须是相等的奇数for(int i=0;i(H+1)/2;i+)for(int j=0;jW/2-i;j+)System.out.print();for(int k=1;k(i+1)*2;k+)System.out.print(*);System.out.println();for(int i=1;i=H/2;i+)for(int j=1;j=i;j+)System.out.print();for(int k=1;k=W-2*i;k+)System.out.print(*);System.out.println();【程序 20】题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.求出这个数列的前20 项之和。public class lianxi20 public static void main(String args)int x=2,y=1,t;double sum=0;for(int i=1;i=20;i+)sum=sum+(double)x/y;t=y;y=x;x=y+t;System.out.println(前 20 项相加之和是:+sum);【程序 21】题目:求1+2!+3!+.+20!的和public class lianxi21 public static void main(String args)long sum=0;long fac=1;for(int i=1;i=20;i+)fac=fac*i;sum+=fac;System.out.println(sum);【程序 22】题目:利用递归方法求5!。public class lianxi22 public static void main(String args)int n=5;rec fr=new rec();System.out.println(n+!=+fr.rec(n);class rec public long rec(int n)long value=0;if(n=1)value=1;else value=n*rec(n-1);return value;【程序 23】题目:有5 个人坐在一起,问第五个人多少岁?他说比第4 个人大 2 岁。问第 4 个人岁数,他说比第3 个人大 2 岁。问第三个人,又说比第2 人大两岁。问第 2 个人,说比第一个人大两岁。最后问第一个人,他说是10 岁。请问第五个人多大?public class lianxi23 public static void main(String args)int age=10;for(int i=2;i=0;i-)System.out.print(chi);【程序 25】题目:一个5 位数,判断它是不是回文数。即12321 是回文数,个位与万位相同,十位与千位相同。import java.util.*;public class lianxi25 public static void main(String args)Scanner s=new Scanner(System.in);int a;do System.out.print(请输入一个5 位正整数:);a=s.nextInt();while(a99999);String ss=String.valueOf(a);char ch=ss.toCharArray();if(ch0=ch4&ch1=ch3)System.out.println(这是一个回文数);else System.out.println(这不是一个回文数);/这个更好,不限位数import java.util.*;public class lianxi25a public static void main(String args)Scanner s=new Scanner(System.in);boolean is=true;System.out.print(请输入一个正整数:);long a=s.nextLong();String ss=Long.toString(a);char ch=ss.toCharArray();int j=ch.length;for(int i=0;ij/2;i+)if(chi!=chj-i-1)is=false;if(is=true)System.out.println(这是一个回文数);else System.out.println(这不是一个回文数);【程序 26】题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。import java.util.*;public class lianxi26 public static void main(String args)getChar tw=new getChar();System.out.println(请输入星期的第一个大写字母:);char ch=tw.getChar();switch(ch)case M:System.out.println(Monday);break;case W:System.out.println(Wednesday);break;case F:System.out.println(Friday);break;case T:System.out.println(请输入星期的第二个字母:);char ch2=tw.getChar();if(ch2=U)System.out.println(Tuesday);else if(ch2=H)System.out.println(Thursday);else System.out.println(无此写法!);break;case S:System.out.println(请输入星期的第二个字母:);char ch2=tw.getChar();if(ch2=U)System.out.println(Sunday);else if(ch2=A)System.out.println(Saturday);else System.out.println(无此写法!);break;default:System.out.println(无此写法!);class getChar public char getChar()Scanner s=new Scanner(System.in);String str=s.nextLine();char ch=str.charAt(0);if(chZ)System.out.println(输入错误,请重新输入);ch=getChar();return ch;【程序 27】题目:求100 之内的素数/使用除 sqrt(n)的方法求出的素数不包括2 和 3 public class lianxi27 public static void main(String args)boolean b=false;System.out.print(2+);System.out.print(3+);for(int i=3;i100;i+=2)for(int j=2;j=Math.sqrt(i);j+)if(i%j=0)b=false;break;elseb=true;if(b=true)System.out.print(i+);/该程序使用除1 位素数得 2 位方法,运行效率高通用性差。public class lianxi27a public static void main(String args)int a=new int2,3,5,7;for(int j=0;j4;j+)System.out.print(aj+);boolean b=false;for(int i=11;i100;i+=2)for(int j=0;j4;j+)if(i%aj=0)b=false;break;elseb=true;if(b=true)System.out.print(i+);【程序 28】题目:对10 个数进行排序import java.util.*;public class lianxi28 public static void main(String args)Scanner s=new Scanner(System.in);int a=new int10;System.out.println(请输入 10 个整数:);for(int i=0;i10;i+)ai=s.nextInt();for(int i=0;i10;i+)for(int j=i+1;j aj)int t=ai;ai=aj;aj=t;for(int i=0;i10;i+)System.out.print(ai+);【程序 29】题目:求一个3*3 矩阵对角线元素之和import java.util.*;public class lianxi29 public static void main(String args)Scanner s=new Scanner(System.in);int a=new int33;System.out.println(请输入 9个整数:);for(int i=0;i3;i+)for(int j=0;j3;j+)aij=s.nextInt();System.out.println(输入的 3*3 矩阵是:);for(int i=0;i3;i+)for(int j=0;j3;j+)System.out.print(aij+);System.out.println();int sum=0;for(int i=0;i3;i+)for(int j=0;j=aa.length-1)bb.length-1=num;for(i=0;ia.length;i+)bi=ai;else for(i=0;i=ai)bi=ai;else bi=num;break;for(int j=i+1;jb.length;j+)bj=aj-1;for(i=0;i b.length;i+)System.out.print(bi+);【程序 31】题目:将一个数组逆序输出。import java.util.*;public class lianxi31 public static void main(String args)Scanner s=new Scanner(System.in);int a=new int20;System.out.println(请输入多个正整数(输入-1 表示结束):);int i=0,j;do ai=s.nextInt();i+;while(ai-1!=-1);System.out.println(你输入的数组为:);for(j=0;j=0;j=j-1)System.out.print(aj+);【程序 32】题目:取一个整数a 从右端开始的4 7位。import java.util.*;public class lianxi32 public static void main(String args)Scanner s=new Scanner(System.in);System.out.print(请输入一个7 位以上的正整数:);long a=s.nextLong();String ss=Long.toString(a);char ch=ss.toCharArray();int j=ch.length;if(j7)System.out.println(输入错误!);else System.out.println(截取从右端开始的47位是:+chj-7+chj-6+chj-5+chj-4);【程序 33】题目:打印出杨辉三角形(要求打印出10 行如下图)1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 public class lianxi33 public static void main(String args)int a=new int1010;for(int i=0;i10;i+)aii=1;ai0=1;for(int i=2;i10;i+)for(int j=1;ji;j+)aij=ai-1j-1+ai-1j;for(int i=0;i10;i+)for(int k=0;k2*(10-i)-1;k+)System.out.print();for(int j=0;j=i;j+)System.out.print(aij+);System.out.println();【程序 34】题目:输入3 个数 a,b,c,按大小顺序输出。import java.util.Scanner;public class lianxi34 public static void main(String args)Scanner s=new Scanner(System.in);System.out.println(请输入 3 个整数:);int a=s.nextInt();int b=s.nextInt();int c=s.nextInt();if(a b)int t=a;a=b;b=t;if(a c)int t=a;a=c;c=t;if(b c)int t=b;b=c;c=t;System.out.println(从大到小的顺序输出:);System.out.println(a+b+c);【程序 35】题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。import java.util.*;public class lianxi35 public static void main(String args)int N=8;int a=new int N;Scanner s=new Scanner(System.in);int idx1=0,idx2=0;System.out.println(请输入 8 个整数:);for(int i=0;iN;i+)ai=s.nextInt();System.out.println(你输入的数组为:);for(int i=0;iN;i+)System.out.print(ai+);int max=a0,min=a0;for(int i=0;i max)max=ai;idx1=i;if(ai min)min=ai;idx2=i;if(idx1!=0)int temp=a0;a0=aidx1;aidx1=temp;if(idx2!=N-1)int temp=aN-1;aN-1=aidx2;aidx2=temp;System.out.println(n交换后的数组为:);for(int i=0;iN;i+)System.out.print(ai+);【程序 36】题目:有 n 个整数,使其前面各数顺序向后移m个位置,最后 m个数变成最前面的m个数import java.util.Scanner;public class lianxi36 public static void main(String args)int N=10;int a=new intN;Scanner s=new Scanner(System.in);System.out.println(请输入 10 个整数:);for(int i=0;iN;i+)ai=s.nextInt();System.out.print(你输入的数组为:);for(int i=0;iN;i+)System.out.print(ai+);System.out.print(n请输入向后移动的位数:);int m=s.nextInt();int b=new intm;for(int i=0;i=m;i-)ai=ai-m;for(int i=0;im;i+)ai=bi;System.out.print(位移后的数组是:);for(int i=0;iN;i+)System.out.print(ai+);【程序 37】题目:有n 个人围成一圈,顺序排号。从第一个人开始报数(从1 到 3 报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。import java.util.Scanner;public class lianxi37 public static void main(String args)Scanner s=new Scanner(System.in);System.out.print(请输入排成一圈的人数:);int n=s.nextInt();boolean arr=new booleann;for(int i=0;i 1)if(arrindex=true)countNum+;if(countNum=3)countNum=0;arrindex=false;leftCount-;index+;if(index=n)index=0;for(int i=0;in;i+)if(arri=true)System.out.println(原排在第+(i+1)+位的人留下了。);【程序 38】题目:写一个函数,求一个字符串的长度,在main 函数中输入字符串,并输出其长度。/*题目意思似乎不能用length()函数 */import java.util.*;public class lianxi38 public static void main(String args)Scanner s=new Scanner(System.in);System.out.println(请输入一个字符串:);String str=s.nextLine();System.out.println(字符串的长度是:+str.length();【程序 39】题目:编写一个函数,输入n 为偶数时,调用函数求1/2+1/4+.+1/n,当输入 n 为奇数时,调用函数1/1+1/3+.+1/n(利用指针函数)/没有利用指针函数import java.util.*;public class lianxi39 public static void main(String args)Scanner s=new Scanner(System.in);System.out.print(请输入一个正整数 n=);int n=s.nextInt();System.out.println(相应数列的和为:+sum(n);public static double sum(int n)double res=0;if(n%2=0)for(int i=2;i=n;i+=2)res+=(double)1/i;else for(int i=1;i=n;i+=2)res+=(double)1/i;return res;【程序 40】题目:字符串排序。public class lianxi40 public static void main(String args)int N=5;String temp=null;String s=new StringN;s0=matter;s1=state;s2=solid;s3=liquid;s4=gas;for(int i=0;iN;i+)for(int j=i+1;jN;j+)if(compare(si,sj)=false)temp=si;si=sj;sj=temp;for(int i=0;iN;i+)System.out.println(si);static boolean compare(String s1,String s2)boolean result=true;for(int i=0;is1.length()&i s2.charAt(i)result=false;break;else if(s1.charAt(i)s2.charAt(i)result=true;break;else if(s1.length()s2.length()result=true;else result=false;return result;【程序 41】题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?public class lianxi41 public static void main(String args)int i,m,j=0,k,count;for(i=4;i10000;i+=4)count=0;m=i;for(k=0;k5;k+)j=i/4*5+1;i=j;if(j%4=0)count+;else break;i=m;if(count=4)System.out.println(原有桃子 +j+个);break;【程序 42】题目:809*?=800*?+9*?+1 其中?代表的两位数,8*?的结果为两位数,9*?的结果为 3 位数。求?代表的两位数,及809*?后的结果。/题目错了!809x=800 x+9x+1 这样的方程无解。去掉那个1 就有解了。public class lianxi42 public static void main(String args)int a=809,b,i;for(i=10;i13;i+)b=i*a;if(8*i=100)System.out.println(809*+i+=+800*+i+9*+i+=+b);【程序 43】题目:求07 所能组成的奇数个数。/组成 1 位数是 4 个。/组成 2 位数是 7*4 个。/组成 3 位数是 7*8*4 个。/组成 4 位数是 7*8*8*4个。/.public class lianxi43 public static void main(String args)int sum=4;int j;System.out.println(组成 1 位数是 +sum+个);sum=sum*7;System.out.println(组成 2 位数是 +sum+个);for(j=3;j=9;j+)sum=sum*8;System.out.println(组成+j+位数是 +sum+个);【程序

    注意事项

    本文(java经典算法40例2.pdf)为本站会员(索****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开