1、java经典算法40初学必做基础java经典算法40题(21-40)【程序21】 题目:求1+2!+3!+.+20!的和 1.程序分析:此程序只是把累加变成了累乘。 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=1; i 1) value = n * recursion(n-1);return value;【程序23】 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大
2、2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? 1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。 public class Ex23 static int getAge(int n)if (n=1)return 10;return 2 + getAge(n-1);public static void main(String args) System.out.println(第五个的年龄为:+g
3、etAge(5);【程序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 = s.nextLong();if(a 100000) System.out.println(Error Input, please run this program Again);System.ex
4、it(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 int5;static int b = new int5;public static void main(String args) boolean is =false;Scanner s
5、= new Scanner(System.in);long l = s.nextLong();if (l 99999 | l = 0; i-) ai = (int) (l / (long) Math.pow(10, i);l =(l % ( long) Math.pow(10, i);System.out.println();for(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.ou
6、t.println(is not a Palindrom!); else if(is = true) System.out.println(is a Palindrom!);【程序26】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。 1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。 import java.util.Scanner;public class Ex26 public static void main(String args)/保存用户输入的第二个字母char weekSecond;/将
7、Scanner类示例化为input对象,用于接收用户输入Scanner input = new Scanner(System.in);/开始提示并接收用户控制台输入 System.out.print(请输入星期值英文的第一个字母,我来帮您判断是星期几:);String letter = input.next();/判断用户控制台输入字符串长度是否是一个字母if (letter.length() = 1)/利用取第一个索引位的字符来实现让Scanner接收char类型输入char weekFirst = letter.charAt(0);switch (weekFirst)case m:/当输入
8、小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能case M:System.out.println(星期一(Monday);break;case t:/当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能case T:System.out.print(由于星期二(Tuesday)与星期四(Thursday)均以字母T开头,故需输入第二个字母才能正确判断:);letter = input.next();/判断用户控制台输入字符串长度是否是一个字母if (l
9、etter.length() = 1)/利用取第一个索引位的字符来实现让Scanner接收char类型输入weekSecond = letter.charAt(0);/利用或(|)运算符来实现忽略用户控制台输入大小写敏感的功能if (weekSecond = U | weekSecond = u)System.out.println(星期二(Tuesday);break;/利用或(|)运算符来实现忽略用户控制台输入大小写敏感的功能 else if (weekSecond = H | weekSecond = h)System.out.println(星期四(Thursday);break;/控
10、制台错误提示 elseSystem.out.println(输入错误,不能识别的星期值第二个字母,程序结束!);break; else /控制台错误提示 System.out.println(输入错误,只能输入一个字母,程序结束!);break;case w:/当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能case W:System.out.println(星期三(Wednesday);break;case f:/当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台
11、输入大小写敏感的功能case F:System.out.println(星期五(Friday);break;case s:/当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能case S:System.out.print(由于星期六(Saturday)与星期日(Sunday)均以字母S开头,故需输入第二个字母才能正确判断:);letter = input.next();/判断用户控制台输入字符串长度是否是一个字母if (letter.length() = 1)/利用取第一个索引位的字符来实现让Scanner接收char类
12、型输入weekSecond = letter.charAt(0);/利用或(|)运算符来实现忽略用户控制台输入大小写敏感的功能if (weekSecond = A | weekSecond = a)System.out.println(星期六(Saturday);break;/利用或(|)运算符来实现忽略用户控制台输入大小写敏感的功能 else if (weekSecond = U | weekSecond = u)System.out.println(星期日(Sunday);break;/控制台错误提示 elseSystem.out.println(输入错误,不能识别的星期值第二个字母,程序
13、结束!);break; else/控制台错误提示 System.out.println(输入错误,只能输入一个字母,程序结束!);break;default:/控制台错误提示 System.out.println(输入错误,不能识别的星期值第一个字母,程序结束!);break; else/控制台错误提示 System.out.println(输入错误,只能输入一个字母,程序结束!);【程序27】 题目:求100之内的素数 public class Ex27 public static void main(String args)int sum,i;for(sum=2;sum=100;sum+)
14、for(i=2;isum/2)System.out.println(sum+是素数);【程序28】 题目:对10个数进行排序 1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。 import java.util.Arrays;import java.util.Random;import java.util.Scanner;public class Ex28 public static void main(String args) int arr = new int11;Random r=new Rando
15、m();for(int i=0;i10;i+)arri=r.nextInt(100)+1;/得到10个100以内的整数Arrays.sort(arr);for(int i=0;iarr.length;i+)System.out.print(arri+t);System.out.print(nPlease Input a int number: );Scanner sc=new Scanner(System.in);arr10=sc.nextInt();/输入一个int值Arrays.sort(arr);for(int i=0;iarr.length;i+)System.out.print(ar
16、ri+t);【程序29】 题目:求一个3*3矩阵对角线元素之和 1.程序分析:利用双重for循环控制输入二维数组,再将aii累加后输出。 public class Ex29 public static void main(String args)double sum=0;int array=1,2,3,4,5, 6,7,7,8;for(int i=0;i3;i+)for(int j=0;j3;j+)if(i=j)sum=sum + arrayij;System.out.println( sum); 【程序30】 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 1.
17、 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。 import java.util.Random;public class ArraySort public static void main(String args) int temp=0;int myarr = new int12;Random r=new Random();for(int i=1;i=10;i+)myarri=r.nextInt(1000);for (int k=1;k=10;k+)System.out.print(myarrk+,);for(int i=1;
18、i=9;i+)for(int k=i+1;kmyarrk)temp=myarri;myarri=myarrk;myarrk=temp;System.out.println();for (int k=1;k=10;k+)System.out.print(myarrk+,);myarr11=r.nextInt(1000);for(int k=1;kmyarr11)temp=myarr11;for(int j=11;j=k+1;j-)myarrj=myarrj-1;myarrk=temp;System.out.println(); for (int k=1;k=1;k-)System.out.pri
19、nt(myarrk+,);【程序32】 题目:取一个整数a从右端开始的47位。 程序分析:可以这样考虑: (1)先使a右移4位。 (2)设置一个低4位全为1,其余全为0的数。可用(0 4) (3)将上面二者进行&运算。 public class Ex32 public static void main(String args)int a=0;long b=18745678;a=(int) Math.floor(b % Math.pow(10,7)/Math.pow(10, 3);System.out.println(a);【程序33】 题目:打印出杨辉三角形(要求打印出10行如下图) 1.程序
20、分析: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 public class Ex33 public static void main(String args)int i,j;int a;a=new int88;for(i=0;i8;i+)aii=1;ai0=1; for(i=2;i8;i+)for(j=1;j=i-1;j+)aij=ai-1j-1+ai-1j; for(i=0;i8;i+)for(j=0;j=0;) for(int j=0;jarraysj+1) int temp=arraysj; arraysj=arraysj+1; arrays
21、j+1=temp; for(int n=0;narrays.length;n+) System.out.println(arraysn); 【程序35】 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 import java.util.*; public class Ex35 public static void main(String args) int i, min, max, n, temp1, temp2; int a; System.out.println(输入数组的长度:); Scanner keyboard = new Scanner(System.
22、in); n = keyboard.nextInt(); a = new intn; for (i = 0; i n; i+) System.out.print(输入第 + (i + 1) + 个数据); ai = keyboard.nextInt(); /以上是输入整个数组max = 0; min = 0; /设置两个标志,开始都指向第一个数for (i = 1; i amax) max = i; /遍历数组,如果大于amax,就把他的数组下标赋给maxif (ai amin) min = i; /同上,如果小于amin,就把他的数组下标赋给min /以上for循环找到最大值和最小值,max
23、是最大值的下标,min是最小值的下标temp1 = a0; temp2 = amin; /这两个temp只是为了在交换时使用a0 = amax; amax = temp1; /首先交换a0和最大值amaxif (min != 0) /如果最小值不是a0,执行下面amin = an - 1; an - 1 = temp2; /交换amin和an-1 else /如果最小值是a0,执行下面amax = an - 1; an - 1 = temp1; for (i = 0; i n; i+) /输出数组System.out.print(ai + ); 【程序36】 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 【程序37】 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1