Java基础算法

it2024-01-31  65

文章目录

一、Java基础算法1.一共有20级楼梯,每次可以上1级或2级,登上第20级一共有多少种上法。2.生成随机验证码(5位数,有数字,有大写字母,小写字母.3.彩票算法4.求出10000以内素数的和5.任意一个整数,请输出其各个位数的和。6.请输入10000以内所有的完数.7.实现任意数量的实心菱形和固定数量的实心菱形


一、Java基础算法

1.一共有20级楼梯,每次可以上1级或2级,登上第20级一共有多少种上法。

package com.java.demoTest; public class Test { /** * 一共有20级楼梯,每次可以上1级或2级,登上第20级一共有多少种上法 * @param n * @return */ static int f(int n){ //上一级的第一种方法 if (1 == n){ return 1; } //上二级的第二种方法 if (2 == n){ return 2; } //上三级的第三种方法 //从第三级开始往后,每级的上法是前两级的和 if (n > 2){ return f(n - 1) + f(n - 2); } return f(0); } public static void main(String[] args) { int a = f(20); //层数 System.out.println(a+"种方法"); } }

2.生成随机验证码(5位数,有数字,有大写字母,小写字母.

package com.java.demoTest; import java.util.Random; /** * 生成随机验证码(5位数,有数字,有大写字母,小写字母 */ public class Test2 { public static void main(String[] args) { for (int i = 0; i < 1; i++) { System.out.println("随机验证码:"+code()); } System.out.println("=========================="); Random random = new Random(); //当前数组不赋值的情况下,每一个元素值默认为false boolean[] arr = new boolean[26]; //26个字母 boolean[] brr = new boolean[10]; //0-10个数字 int type; //放产生随机的类型 char a; //存放产生的具体字符 String b = ""; //存放累加的字符串 int index; //存放当前具体字符所在数组的下标 for (int i = 0; i < 5; i++) { type = random.nextInt(3); if (type == 0){ do { //这一轮产生的是大写字母 index = random.nextInt(26); //0-25 a = (char) (65 + index); }while (arr[index]); arr[index] = true; }else if (type == 1){ do { //这一轮产生的是小写字母 index = random.nextInt(26);//0-25 a = (char) (97 + index); }while (arr[index]); arr[index] = true; }else { //这一轮产生的是数字 do { index = random.nextInt(10);//0-9 a = (char) (48 + index); }while (brr[index]); brr[index] = true; } b = b + a; } System.out.println("验证码:"+b); } //第二种方法(验证码会重复) public static String code() { Random random = new Random(); String a = ""; for (int i = 0; i < 5; i++) { int b = random.nextInt(3); switch (b){ case 0: int code1 = random.nextInt(10); a += code1; break; case 1: char code2 = (char)(random.nextInt(26)+65); a += code2; break; case 2: char code3 = (char)(random.nextInt(26)+97); a += code3; break; } } return a; } }

3.彩票算法

package com.java.demoTest; import java.util.Arrays; import java.util.Random; import java.util.Scanner; /* 彩票项目 */ public class Test3 { public static void main(String[] args) { Random random = new Random(); // 中奖结果 int[] a = new int[3]; for (int i = 0; i < a.length; i++) { a[i] = random.nextInt(10); } // 中奖结果显示出来 for (int j : a) { System.out.print(j + "\t"); } System.out.println(); // 客户开始买彩票 Scanner scanner = new Scanner(System.in); System.out.println("彩票两元一注,请问需要购买多少注。"); // 客户所购买的彩票注数 int n = scanner.nextInt(); System.out.println("你购买的彩票为" + n + "注,请付款" + 2 * n + "元!"); int[] b = new int[3]; // 赋值 for (int x = 1; x <= n; x++) { System.out.println("请输入您购买的第" + x + "注彩票"); for (int z = 0; z < b.length; z++) { System.out.println("请输入您购买彩票的第" + (z + 1) + "个数字"); b[z] = scanner.nextInt(); if (b[z] < 0 || b[z] >= 10) { System.out.println("您输入的第" + (z + 1) + "个数字有误,请重新输入:"); // 回溯 z--; } } System.out.println("您购买的彩票如下:"); for (int y = 0; y < b.length; y++) { System.out.print(b[y] + " "); } System.out.println(); // 对比中奖 if (a[0] == b[0] && a[1] == b[1] && a[2] == b[2]) { System.out.println("恭喜您,中大奖了。"); } else { Arrays.sort(a); Arrays.sort(b); if (a[0] == b[0] && a[1] == b[1] && a[2] == b[2]) { System.out.println("恭喜您,中小奖了。"); } else { System.out.println("很遗憾,您没有中奖。"); } } } } }

4.求出10000以内素数的和

package com.java.demoTest; /* 求出10000以内素数的和 */ public class Test5 { public static void main(String[] args) { /*int sum = 0; for (int i = 1; i <= 10000; i++) { int a = 2; while(i > a){ if (i % a ==0){ break; } a++; } if (i == a){ for (int j = i; j <= i; j++) { sum +=j; } System.out.println(sum); } }*/ //计算和的值 int sum = 0; //计算当前范围有多少个素数 int count = 0; /* 素数的特点:约数只有1和本身 */ for (int i = 2 ; i <= 10000 ; i++) { boolean falg = true; //任何一个正整数都有1这个约数和其本身,所以1和其本身不用判断 for (int j = 2; j < i; j++) { //判断j是否是i的约数 if (i % j == 0){ //把非1和本身的约数的数字给关上(false) falg = false; break; } } //这里输出状态是true,输出的就是质数 if(falg){ count++; System.out.println(i); //求和 sum+=i; } } System.out.println("10000以内有"+count+"个质数"); System.out.println("10000以内质数的和为"+sum); } }

5.任意一个整数,请输出其各个位数的和。

package com.java.demoTest; import java.util.Scanner; /* 任意一个整数,请输出其各个位数的和。 */ public class Test6 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个整数:"); int a = scanner.nextInt(); int sum = 0; while(a != 0){ //累加a这个数字的最后一位,每一次累加当前这个数字的末位 /* 例:785 sum=0+785%10=5 sum=5+78%10=13 sum=13+7%10=20 */ sum = sum + a % 10; //降位 (a不需要累加最后一位,需要降位,降成不需要最后一位的那个数字) /* a=785/10=78 再跳到上面 a=78/10=7 再再跳到上面 a=7/10=0.7=0 */ a = a / 10; } System.out.println("各个位数的和为:"+sum); } }

6.请输入10000以内所有的完数.

package com.java.demoTest; /* 完数:数字本身等于其因子之和 请输入10000以内所有的完数 */ public class Test7 { public static void main(String[] args) { int sum = 0; System.out.println("请输出10000以内所有的完数"); for (int i = 1; i <= 10000; i++) { for (int j = 1; j <= i/2; j++) { //j是这个数字的因子 if (i % j == 0){ //如果条件达成,那么j就是i的因子 sum +=j; //当前数字因子求和 } } if (sum == i){ System.out.println(i); } sum = 0; } } }

7.实现任意数量的实心菱形和固定数量的实心菱形

package com.java.demoTest; import java.util.Scanner; /* 实现任意数量的实心菱形和固定数量的实心菱形 */ public class Test8 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入要打印的菱形的行数:"); int a = input.nextInt(); //demo(a); //方法二 /* 上下结构 上半部分的等腰三角形 */ for (int i = 1; i <= (a + 1) / 2 ; i++) { for (int j = 1; j <= 4 - i ; j++) { System.out.print(" "); } for (int k = 1; k <= 2 * i - 1; k++) { System.out.print("*"); } System.out.println(); } /* 下半部分的三角形 */ for (int u = 1; u <= (a - 1) / 2; u++) { for (int y = 1; y <= u; y++) { System.out.print(" "); } for (int t = 1; t <= 2 * ((a - 1) / 2 - u) + 1; t++) { System.out.print("*"); } System.out.println(); } } //方法一 /*public static void demo(int b){ for (int i = 1; i < b; i++) { for (int j = 0; j < b - i; j++) { System.out.print(" "); } for (int k = 0; k < 2 * i - 1; k++) { System.out.print("*"); } System.out.println(); } for (int i = b - 1; i > 0; i--) { for (int j = 0; j < b - i; j++) { System.out.print(" "); } for (int k = 0; k < 2 * i - 1; k++) { System.out.print("*"); } System.out.println(); } }*/ }
最新回复(0)