Java经典算法(三)

    xiaoxiao2021-03-25  10

    Java经典算法(三)

    说明:共有四十题。本部分为第三部分,共十题。

    21、题目:求1+2!+3!+...+20!的和

    package com.remoa.algorithm.day11; /** * 题目:求1+2!+3!+...+20!的和 * @author Remoa * */ public class Factorial { public static int algorithm(){ int sum = 0, temp = 1; for(int i = 1; i <= 20; i++){ temp *= i; sum += temp; } return sum; } public static void main(String[] args) { System.out.println("和为:" + algorithm()); } } 运行结果:

    图21.1 求和运行结果

    22、题目:利用递归方法求5!

    package com.remoa.algorithm.day11; /** * 题目:利用递归方法求5!。 * @author Remoa * */ public class Recursion { public static int algorithm(int number){ int result = 0; if(number == 1){ result = 1; }else{ result = number * algorithm(number - 1); } return result; } public static void main(String[] args) { System.out.println("5!的结果为:" + algorithm(5)); } } 运行结果:

    图22.1 递归运行结果

    23、题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

    package com.remoa.algorithm.day12; /** * 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? * @author Remoa * */ public class Age { public static int algorithm(int n){ if(n == 1){ return 10; }else{ return 2 + algorithm(n - 1); } } public static void main(String[] args) { System.out.println("第五个人为" + algorithm(5) + "岁"); } } 运行结果:

    图23.1 求年龄运行结果

    24、题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

    package com.remoa.algorithm.day12; import java.util.Scanner; /** * 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 * @author Remoa * */ public class PrintNumber { public static void algorithm(int number){ for(int i = 1; i <= 5; i++){ if(number / (int)Math.pow(10, i) == 0){ System.out.println(number + "为" + i + "位数"); for(int j = i; j >= 1; j--){ System.out.print(number % 10); number /= 10; } break; } } } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个不多于5位的正整数:"); algorithm(scanner.nextInt()); scanner.close(); } } 运行结果:

    图24.1 逆序输出运行结果

    25、题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

    package com.remoa.algorithm.day13; import java.util.Scanner; /** * 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。   * @author Remoa * */ public class Palindrome { public static void algorithm(int number){ int[] a = new int[5]; System.out.print(number); for(int i = 0; i < 5; i++){ a[i] = number % 10; number /= 10; } if(a[1] == a[3] && a[0] == a[4]){ System.out.println("是一个回文数"); }else{ System.out.println("不是一个回文数"); } } public static void main(String []args){ Scanner scanner = new Scanner(System.in); System.out.println("请输入一个五位数:"); int number = scanner.nextInt(); algorithm(number); scanner.close(); } } 运行结果:

    图25.1 回文数运行结果   

    26、题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续   判断第二个字母。

    package com.remoa.algorithm.day13; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。 * @author Remoa * */ public class WhatDayIsIt { public static void judge(char c) throws IOException{ switch(c){ case 'M': case 'm': System.out.println("星期一"); break; case 'T': case 't': System.out.println("请输入下一个字符:"); BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); char c2 = (char)bf.read(); if(c2 == 'U' || c2 == 'u'){ System.out.println("星期二"); } else if(c2 == 'h' || c2 == 'H'){ System.out.println("星期四"); }else{ System.out.println("输入错误"); } break; case 'W': case 'w': System.out.println("星期三"); break; case 'F': case 'f': System.out.println("星期五"); break; case 'S': case 's': System.out.println("请输入下一个字符:"); BufferedReader bf2 = new BufferedReader(new InputStreamReader(System.in)); char c3 = (char)bf2.read(); if(c3 == 'a' || c3 == 'A'){ System.out.println("星期六"); } else if(c3 == 'u' || c3 == 'U'){ System.out.println("星期天"); }else{ System.out.println("输入错误"); } break; default: System.out.println("输入错误"); break; } } public static void main(String[] args) throws IOException { char c; System.out.println("请输入星期几的第一个字母:"); BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); c = (char)bf.read(); judge(c); } } 运行结果:

    图26.1 求星期几运行结果  

    27、题目:求100之内的素数

    package com.remoa.algorithm.day14; /** * 题目:求100之内的素数 * @author Remoa * */ public class PrimeNumber { public static void algorithm(){ int i, j, flag = 0, count = 0; for(i = 2; i <= 100; i++){ flag = 1; for(j = 2; j <= Math.sqrt(i); j++){ if(i % j == 0){ flag = 0; break; } } if(flag == 1){ if(count % 5 == 0 && count != 0){ System.out.println(); } System.out.print(i + " "); count++; } } } public static void main(String[] args) { algorithm(); } } 运行结果:

    图27.1 求100以内素数运行结果

    28、题目:对10个数进行排序

    package com.remoa.algorithm.day14; /** * 题目:对10个数进行排序 * @author Remoa * */ public class Sort { //升序排列 public static void algorithm(int arr[], int low, int high){ int l = low, h = high; int point = arr[low]; while(l < h){ while(l < h && arr[h] > point){ h--; } if(l < h){ int temp = arr[h]; arr[h] = arr[l]; arr[l] = temp; l++; } while(l < h && arr[l] < point){ l++; } if(l < h){ int temp = arr[h]; arr[h] = arr[l]; arr[l] = temp; h--; } } if(l > low){ algorithm(arr, low, l - 1); } if(h < high){ algorithm(arr, l + 1, high); } } public static void main(String []args){ int[] arr = new int[]{2,3,8,6,4,5,1,9,7,10}; System.out.println("原数组的序列为:"); for(int i = 0; i < arr.length; i++){ System.out.print(arr[i] + " "); } System.out.println(); algorithm(arr, 0, 9); System.out.println("升序排序后的数组序列为:"); for(int i = 0; i < arr.length; i++){ System.out.print(arr[i] + " "); } } } 运行结果:

    图28.1 排序运行结果

    29、题目:求一个3*3矩阵对角线元素之和

    package com.remoa.algorithm.day15; /** * 题目:求一个3*3矩阵对角线元素之和 * @author Remoa * */ public class Sum { public static int algorithm(int [][]arr){ int sum = 0; for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ if(i == j){ sum += arr[i][j]; } } } return sum; } public static void main(String[] args) { int arr[][] = new int[][]{{1,2,3}, {4,5,6}, {7,8,9}}; System.out.println("对角线元素之和为:" + algorithm(arr)); } } 运行结果:

    图29.1 对角线元素求和运行结果

    30、题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

    package com.remoa.algorithm.day15; import java.util.Random; import java.util.Scanner; /** * 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 * @author Remoa * */ public class InsertNumber { public static void algorithm(int arr[], int number){ if(number > arr[arr.length - 2]){ arr[arr.length - 1] = number; }else{ for(int i = 0; i < arr.length; i++){ if(number < arr[i]){ for(int j = arr.length - 1; j > i; j--){ arr[j] = arr[j - 1]; } arr[i] = number; break; } } } } public static void main(String[] args) { int[] arr = new int[6]; int temp; Random random = new Random(); for(int i = 0; i < 5; i++){ arr[i] = random.nextInt(100); } for(int i = 0; i < 5; i++){ for(int j = i + 1; j < 5; j++){ if(arr[i] > arr[j]){ temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } } System.out.println("原来数组元素序列为:"); for(int i = 0; i < 5; i++){ System.out.print(arr[i] + " "); } System.out.println(); System.out.println("请输入待插入的元素:"); Scanner scanner = new Scanner(System.in); int number = scanner.nextInt(); algorithm(arr, number); System.out.println("插入新元素后数组元素序列为:"); for(int i = 0; i < arr.length; i++){ System.out.print(arr[i] + " "); } scanner.close(); } } 运行结果:

    图30.1 插入数据运行结果

    转载请注明原文地址: https://ju.6miu.com/read-200021.html

    最新回复(0)