《java经典算法40例_计算机软件及应用_IT计算机_专业资料.docx》由会员分享,可在线阅读,更多相关《java经典算法40例_计算机软件及应用_IT计算机_专业资料.docx(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、L程序分析:兔子的规律为数列1, 1, 2, 3, 5, 8,13, 21. public class exp2 public static void main(String args) int i=0; for (i=l; i=20; i+)System, out. printin(f (i);public static int f(int x) if(x=l I I x=2) return 1; else return f (xT)+f (x-2);)或public class exp2 public static void main(String args) int i=0;math m
2、ymath = new math(); for (i=l;i=20;i+) System, out. printin (mymath. f (i);)class math public int f(int x) if(x=l I I x=2) return 1; elsereturn f (xT)+f (x-2);【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。1 .程序分析:判断素数的方法:用个数分别去除2到 sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。public class exp2 public static void main(String
3、args) int i=0;math mymath = new math(); for(i=2;i=200;i+)if(mymath. iszhishu(i)=true) System, out. println(i);)class math public int f(int x) if(x=l I I x=2) return 1; else return f (xT)+f (x-2);public boolean iszhishu(int x) for(int i=2;i=x/2;i+) if (x % 2=0 ) return false; return true;【程序3】题目:打印出所
4、有的“水仙花数所谓“水仙花数”是指个三位数, 其各位数字立方和等于该数本身。例如:153是一个”水仙花数因为153=1的三次方+5的三次方+3的三次方。L程序分析:利用for循环控制100-999个数,每个数分解 出个位,十位,百位。public class exp2public static void main(String args) int i=0;math mymath = new math(); for(i=100;i=999;i+)if(mymath. shuixianhua(i)=true)System, out. println(i);)class math public in
5、t f(int x) if(x=l I I x=2) return 1; elsereturn f (xT)+f (x-2);public boolean iszhishu(int x) for(int i=2;i b)?a:b这是条件运算符的基本例子。import javax. swing.*; public class ex5 public static void main(String args) String str=;str=J0pt ionPane. showInputDialog (请输入 N 的值(输入 exit 退出):”);int N;Nt=rOy;N=Integer. p
6、arselnt(str);catch(NumberFormatException e)e. printStackTrace ();str=(N90?A:(N60?B:C);System, out. println(str);【程序6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。1 .程序分析:利用辗除法。最大公约数:public class CommonDivisor public static void main(String args) commonDi v i sor (24,32);static int commonDivisor(int M, int N) if(N0|M
7、0)Sryesttuermn. out. print In (Z/ERROR!,z) ; -1;if(N=0)(rSeytsutrenm. out. println(z,the biggest common divisor is :+M); M;return commonDivisor(N, M%N);)最小公倍数和最大公约数:import java. util. Scanner; public class CandC 下面的方法是求出最大公约数 public static int gcd(int m, int n) while (true)if (m = m % n) = 0) return
8、 n; if (n = n % m) = 0) return m;)public static void main (String args) throws Exception取得输入值/Scanner chin = new Scanner(System, in);/i/ntint a = chin, nextlnt (), b = chin, nextlnt () ; a=23;int b=32; int c = gcd(a, b);System, out. printin(最小公倍数: + a*b/c + n 最大公约数: + c);)【程序7】题目:输入一行字符,分别统计出其中英文字母、
9、空格、数字和其它字符 的个数。L程序分析:利用while语句,条件为输入的字符不为n . import java. util. Scanner; public class ex7 public static void main(String args) (System. out. printin(请输入字符串:); Scanner scan=new Scanner(System, in); String str=scan. next ();String El=u4e00-u9fa5;bintrting E2= a-zA-Z; countH=0; int countE=0; char arrCh
10、ar=str. toCharArray ();String arrStr=new StringarrChar. length; for (int i=0;iarrChar. length ;i+ ) arrStri=String. valueOf(arrChari);for (String i: arrStr ) if (i. matches(El) ( countH+;if (i. matches(E2)countE+;System, out. printin (汉字的个数+countH);System, out. printin (字母的个数+countE);【程序8】题目:求s=a+aa
11、+aaa+aaaa+aa.a的值,其中a是个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。L程序分析:关键是计算出每项的值。import java, io.*; public class Sumloop public static void main(String args) throws lOException int s=0;String output=;BufferedReader stadin = new BufferedReader(new InputStreamReader(System, in);System, out. print
12、in (请输入 a 的值);Sfotrring input =stadin. readLineO ; (int i=1;i=Integer. parselnt(input);i+)(ionuttput+=input; a=Integer. parselnt(output);s+=a;)System, out. printin (s);)另解:import java. io. *; public class Sumloop public static void main(String args) throws lOException int s=0; int n; int t=0;Buffere
13、dReader stadin = new BufferedReader(new InputStreamReader(System, in);String input = stadin. readLineO ;fno=rlnteger. parselnt (input); (int i=l;i=n;i+) t=t*10+n;s=s+t;System, out. println(t);)System, out. println(s);【程序9】题目:个数如果恰好等于它的因子之和,这个数就称为”完数%例如 6=1+2+3.编程找出1000以内的所有完数。public class Wanshu pub
14、lic static void main(String args) int s; for(int i=l;i=1000;i+)(fs=o0r; (int j=l;ji;j+) if(i % j=0)if s=s+j; (s=i)System, out. print (i+);System, out. printlnO ;【程序10】题目:球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹 多高?public class ExlO public static void main(StringL args) double s=0; do
15、uble t=100; for(int i=l;i=10;i+)(s+=t;t=t/2;)System, out. printin(s);System, out. printin(t);【程序11】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三 位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、 4组成所有的排列后再去掉不满足条件的排列。public class Wanshu public static void main(String args) int i=0; int j=0; int k=0; int t=0; for (i=l; i=4;
16、i+) for(j=l;j=4;j+) for(k=l;k=4;k+) if(i!=j & j!=k & i !=k)t+=l;System, out. printin(i*100+j*10+k);System, out. printin (t);【程序12】题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖 金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%; 20万到40万之间时, 高于20万元的部分,可提成5%; 40万到60万之间时高于40万元的部分,可提成3%; 60万到100万之间时,高于60万元的
17、部分,可提 成1.5%,高于100万元时,超过100万元的部分按1%提成,从 键盘输入当月利润I,求应发放奖金总数?L程序分析:请利用数轴来分界,定位。注意定义时需把奖 金定义成长整型。import java . util. *; public class test public static void main (Stringargs) double sum;声明要储存的变量应发的奖金Scanner input =new Scanner (System, in) ;/导入扌描若System, out. print (输入当月利润);double lirun二input . nextDoubl
18、e();从控制台录入利润 if(lirun=100000) sum=lirun*0. 1;else if (lirun=200000)sum=10000+lirun. 075;else if (lirun=400000) sum=17500+1irun. 05;else if (lirun=600000)sum=1irun. 03;else if (lirun=1000000) sum=1irun. 015; elsesum=lirun. 01;System, out. printin (应发的奖金是+sum);)后面其他情况的代码可以由读者自行完善.【程序13题目:个整数,它加上100后是个
19、完全平方数,加上168又是个完全平方数, 请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方, 再将该数加上268后再开方,如果开方后的结果满足如下条 件,即是结果。请看具体分析:public class test public static void main (Stringargs) long k=O; for(k=l;k2)/如果是闰年且月份大于2,总天数 应该加一天/sum+;System, out. println(z/It is the the day:zz+sum);【程序15】题目:输入三个整数x,y,z,请把这三个数由小到大输出。L程序分析:我们想办法
20、把最小的数放到x上,先将x与y 进行比较,如果xy则将x与y的值进行交换,然后再用x 与z进行比较,如果X Z则将X与Z的值进行交换,这样能使X最小。import java. util. *; public class test public static void main (Stringargs) int i=0; int j=0; int k=0; int x=0;System, out. print (“请输入三个数、n);Scanner input = new Scanner(System, in);i=input. nextlnt ();j=input. nextlnt ();k=
21、iifnput. nextlnt (); (ij)(x=i;i=j;j=x;if(ik)(x=i;i二k;k二 x;if(jk)j=k;k=x;System, out. printin (i+z,, +j+, +k);【程序16】题目:输出9*9 口诀。1 .程序分析:分行与列考虑,共9行9歹,i控制行,j控制列。public class jiujiu public static void main(Stringargs) int i=0; int j=0; for(i=l;i=9;i+) for(j=l;j=9;j+)System, out. print (i+*+j+,=+i*j+t);S
22、ystem, out. printin ();)不出现重复的乘积(下三角)public class jiujiu public static void main(Stringargs) int i=0; int j=0; for(i=l;i=9;i+) for(j=l;j=i;j+)System, out. print (i+*+j+=+i*j+、t);System, out. printlnO ;)上三角public class jiujiu public static void main(Stringargs) int i=0; int j=0; for(i=l;i=9;i+) for(j
23、=i;j=9;j+)System, out. print(i+*+j+=+i*j+t);System, out. printin ();)【程序17】题目:猴子吃桃问题:猴子第一天摘若干个桃子,当即吃了一半,还 不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再 吃时,见只剩下个桃子了。求第一天共摘了多少。1 .程序分析:采取逆向思维的方法,从后往前推断。public class猴子吃桃static int total(int day) if(day = 10) return 1;else( return (total
24、(day+l)+l)*2;)public static void main(String args)(System, out. println(total(1);)【程序18】题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为 x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。1.程序分析:判断素数的方法:用个数分别去除2到 sqrt (这个数),如果能被整除,则表明此数不是素数,反之 是素数。import java. util. ArrayList; public class pingpang pSu
25、tbrliincg sat, abt, icc; void main(String口 args) StnngLJ op = t x , y , z );ArrayList arrayList=newArrayList(); for (int i = 0; i 3; i+) for (int j = 0; j 3; j+) for (int k = 0; k 3; k+) pingpang a=new pingpang(opi, opj,opk);if (!a. a. equals (a. b) &! a. b. equals (a. c)&!a. a. equals ( x)& !a. c.
26、equals (x)&!a c. equals (z) arrayList. add(a);)for(Object a:arrayList) System, out. printin(a);) public pingpang (String a, String b, String c) super (); this, a = a; this, b = b; this, c = c;)pOubvelircride String toStringO / TODO Auto-generated method stubreturn a的对手是+a+, +b的对手是+b+, ”+c的对手 是+c+”n;
27、【程序19】题目:打印出如下图案(菱形)*1 .程序分析:先把图形分成两部分来看待,前 四行个规律,后三行个规律,利用双重for 循环,第一层控制行,第二层控制列。三角形:public class StartG public static void main (String args) int i=0; int j=0; for (i=l;i=4;i+) for(j=l;j=l;i-) for(j=1;j=2*i-3;j+)System.out. print(*);System, out. println( );菱形:public class StartG public static void
28、 main(String args) int i=0; int j=0;for (i=l;i=4;i+) for(int k=l; k=4一i;k+) System, out for .print C ); (j=l; j=2*iT; j+) System, out.print(*); System, out. printing );for(i=4;i=l;i-) for(int k=l; k=5-i;k+) for System, out. print (/z ); (j=l;j=2*i-3;j+) System, out. print (*); System, out. printing
29、);【程序20】题目:有一分数序列:2/1, 3/2, 5/3, 8/5, 13/8, 213.求出这个数 列的前20项之和。1 .程序分析:请抓住分子与分母的变化规律。public class test20 public static void main(String args) float fm = If; float fz = If; float temp; float sum = Of; for (int i=0;i20;i+) temp = fm;fm = fz;fz = fz + temp;sum += fz/fm;/System, out. printin(sum);)Syste
30、m, out. println(sum);【程序21】题目:求1+2!+3!+.+20!的和2 .程序分析:此程序只是把累加变成了累乘。public class Ex21 static long sum = 0; static long fac 二 0; public static void main(String args) long sum=0; long fac = 1; for(int i=l; i 1) value = n * recursion(n-l);return value;)【程序23】题目:有5个人坐在起,向第五个人多少岁?他说比第4个人大2岁。 问第4个人岁数,他说比第
31、3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。 请问第五个人多大?1 .程序分析:利用递归的方法,递归分为回推和递推两个阶 段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。public class Ex23 static int getAge(int n) if (n=l) return 10;return 2 + getAge(n-1);public static void main(String args) System, out. printin(第五个的年龄为:+getAge (5);
32、【程序24】题目:给个不多于5位的正整数,要求:、求它是几位数,二、逆 序打印出各位数字。import java. util. Scanner; public class Ex24 public static void main(String args) Ex24 tn = new Ex24 ();Scanner s = new Scanner (System, in); long a =5 . nextLongO ; if(a 100000) System, out. println(,zError Input, please run thisprogram Again);System, e
33、xit(0);if(a =0 & a = 10 & a = 100 & a = 1000 & a = 10000 & a =0; i-) System, out. print (chi);)【程序25】题目:个5位数,判断它是不是回文数。即12321是回文数,个位与 万位相同,十位与千位相同。import java. util. Scanner; public class Ex25 static int a = new int 5; static int b = new int 5; public static void main(String args) boolean is =false;
34、Scanner s = new Scanner(System, in); long 1 =6. nextLongO; if (1 99999 | | 1 = 0; i-) ai = (int) (1 / (long) Math. pow(10, i);1 =(1 % ( long) Math. pow(10, i);Sfyosrtem. out. printin(); (int i=0, j=0; i5; i+, j+) ( bj = ai;for(int i=0, j=4; i5; i+, j) if(ai != bj) is = false; break; else is = true;)if(is = false) System, out. printin(z/is not a Palindrom!); else if(is = true) System, out. println(/zis a Palindrom!);)【程序26】题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字 母样,则继续判断第二个字母。1.程序分析:用情况语句比较好,如果第一个字母样,则 判断用情