Java-11 – JAVA基础编程练习
- 简 介
- 下 载
- 留 言
- 说 明
【程序21】题目:求1+2!+3!+...+20!的和
程序分析:此程序只是把累加变成了累乘。
1、先求该项阶乘的值
2、累加求
public class Programme21 { public static void main(String[] args) { int sum=0;//总和 for (inti = 1; i <= 20;i++) { sum+=factorial(i);//累加 } System.out.println(""+sum); } //求阶乘的实现 private static int factorial(inti) { //求阶乘 int mult=1; for (intj=1 ; j <= i;j++) { mult*=j; } returnmult;//返回阶乘结果 } }
【程序22】
题目:利用递归方法求5!。
程序分析:递归公式:f(n)=n*f(n-1)
不断的调用方法,直到最小的值确定
public class Programme22 { public static void main(String[] args) { System.out.println(Fact(5));//输出结果值 } //递归方法求阶乘的具体代码 private static int Fact(inti) { if (i==1) {//1的阶乘为1 return 1; } returni*Fact(i-1);//不断回调 } }
【程序23】
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
public class Programme23 { public static void main(String[] args) { System.out.println("第五个人的岁数:"+GetAge(5,2)); } //递归方法求第五个人的岁数 private static int GetAge(intnum, intageMore) { if (num==1) {//第一个人岁数为10 return 10; } returnGetAge(num-1, ageMore)+ageMore;//每上一个人岁数加2 } }
【程序24】
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
程序分析:创建一个五位数数的数组,把输入数字的每位数的值赋值到数组里面
* 把输入 数字从个位起获取,并且每获取一次之后/10,这样就能分别获取十位百位千位了
* 把数字打印出来就是题目所求了
public class Programme24 { public static void main(String[] args) { System.out.println("请输入一个不大于5位数的数字:"); Scanner scanner=new Scanner(System.in); int num=scanner.nextInt();//获取输入 int[] arr=new int[5];//创建5位数的数组 int i=0; //循环取位 do{ arr[i]=num%10; num=num/10; i++; }while (num!=0);//只剩下一位时,说明获取完毕,跳出循环 System.out.println("输入数字串的是"+i+"位数的"); System.out.println("逆序输出:"); //打印出数组 for (intj = 0; j < i;j++) { System.out.print(arr[j]+" "); } scanner.close(); } }
【程序25】
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
程序分析:这个程序跟上一个程序类似。
* 创建一个五位数的数组
* 逐次取位
* 组后判断条件就可以了
public class Programme25 { public static void main(String[] args) { System.out.println("请输入一个五位数:"); Scanner scanner=new Scanner(System.in); int input=scanner.nextInt();//获取输入的数字 int arr[]=new int[5];//创建一个大小为5的数组 int i=4; do {//逐次取位 arr[i]=input%10; input/=10; i--; } while (i>=0);//这里的结束条件写input!=0也是可以的 //System.out.println(Arrays.toString(arr)); if (arr[0]==arr[4]&&arr[1]==arr[3]) { System.out.println("输入的数是回文数字!"); }else { System.out.println("输入的数不是回文数字!"); } scanner.close(); } }
【程序26】
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
public class Programme26 { public static void main(String[] args) { System.out.println("请输入第一个英文字母:"); Scanner scanner=new Scanner(System.in); String input=scanner.next(); String input2=""; switch (input) { case"m": System.out.println("Monday"); break; case"t": System.out.println("请输入第二个字母:"); input2=scanner.next(); if (input2.equals("u")) { System.out.println("Tuesday"); }else if (input2.equals("h")) { System.out.println("Thursday"); } else { System.out.println("你输入的字母有误!"); } break; case"w": System.out.println("Wednesday"); break; case"f": System.out.println("Friday"); break; case"s": System.out.println("请输入第二个字母:"); input2=scanner.next(); if (input2.equals("u")) { System.out.println("Sunday"); }else if (input2.equals("a")) { System.out.println("Saturday"); } else { System.out.println("你输入的字母有误!"); } break; default: System.out.println("你输入的字母不正确!"); break; } scanner.close(); } }
【程序27】
题目:求100之内的素数
素数的判断方法:这个数除以2到比它本身少1的数都不能整除,那么这个数就是素数了!
public class Programme27 { public static void main(String[] args) { int sum=0; for (inti = 2; i < 100;i++) { if (IsRight(i)) {//如果是素数就打印出来 System.out.print(i+" "); sum++; if (sum%10==0) {//十个一行 System.out.println(); } } } System.out.println("\n共有素数:"+sum+"个"); } //判断该数是不是素数 private static boolean IsRight(inti) { for (intj = 2; j < Math.sqrt(i);j++) { if (i%j==0) { return false;//不是素数的话,马上返回false } } return true; } }
【程序28】
题目:对10个数进行排序
程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。最后打印出来的数组就是从小到大排列的数组了
public class Programme28 { public static void main(String[] args) { System.out.println("请输入10个数(用空格隔开):"); int[] arr=new int[10]; Scanner scanner=new Scanner(System.in); for (inti = 0; i < 10;i++) { arr[i]=scanner.nextInt(); } //对数组进行排序 int temp=0;//交换数 for (inti = 0; i < 9;i++) { for (intj = i+1; j < arr.length;j++) { if (arr[i]>arr[j]) { //如果第一个数比后面的数大就交换 temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } System.out.println("排列后的数组:"+Arrays.toString(arr));//Arrays类的包装方法! } }
【程序29】
题目:求一个3*3矩阵对角线元素之和
程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
public class Programme29 { public static void main(String[] args) { System.out.println("请输入九个数字:"); Scanner scanner=new Scanner(System.in); int[][]arr=newint[3][3]; //获取矩阵数字 for (inti = 0; i <3;i++) { for (intj = 0; j < 3;j++) { arr[i][j]=scanner.nextInt(); } } System.out.println("第一条对角线之和:"+(arr[0][0]+arr[1][1]+arr[2][2])); System.out.println("第二条对角线之和:"+(arr[0][2]+arr[1][1]+arr[2][0])); scanner.close(); } }
【程序30】
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
1、创建两个数组,如果插入的数字比数组最后一个都大,那么插入的数放在新数组最后就可以
2、如果插入的不是最大,那么和数组前面的数逐一比较,比较到比插入的数大就break
比如第i个符合条件,那么arrB[i-1]=arrA[i-1],arrB[i]=num,arrB[i+1]=arrA[i]
public static void main(String[] args) { System.out.println("请输入一个数字:"); Scanner scanner=new Scanner(System.in); int num=scanner.nextInt(); int[] arrA={3,5,15,36,84,99}; int[] arrB=new int[arrA.length+1]; if (num>arrA[arrA.length-1]) { for (inti = 0; i < arrA.length; i++) { arrB[i]=arrA[i]; } arrB[arrB.length-1]=num; }else { for (inti = 0; i < arrA.length; i++) { if (num<arrA[i]) { for (intj = 0; j < i; j++) { arrB[j]=arrA[j]; } arrB[i]=num; for (intj = i; j < arrA.length;j++) { arrB[j+1]=arrA[j]; } break;//这个很重要 } } } System.out.println("插入一个数后的数组为:"+Arrays.toString(arrB)); scanner.close(); } }