package com.company; import java.util.Scanner; public class Main { public static void main(String[] args) { // 1. 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? // (1). 算法分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... // (2). 算法书写 //第一个月:1 //第二个月:1 // 第三个月:1+1=2 // 第四个月:1+1+1=3 // 第五个月:1+1+1+2=5 // 第六个月:1+1+1+2+3=8 // 第七个月:1+1+1+2+3+5=13 从第三个月开始 n=(n-1)+(n-2) int last = 1;//前一个月的兔子对数(第2个月为1) int last1 = 1;//前前一个月的兔子对数(第1个月为1) int temp;//当前兔子总对数 for (int i = 1; i <= 12; i++) { if (i > 2) { temp = last + last1; last1 = last; last = temp; System.out.println("第" + i + "个月的兔子总数为" + 2 * temp + "个"); } else { System.out.println("第" + i + "个月的兔子总数为2个"); } } // 2. 题目:判断101-200之间有多少个素数,并输出所有素数。 // (1). 算法分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 //素数的质素只有1和它本身 int count = 0;//素数的总数 for (int i = 101; i < 201; i++) { for (int j = 2; j <= i; j++) { if (i % j == 0) { if (i == j) { count++; System.out.println(i); } else { break; } } } } System.out.println("一共有" + count + "个素数"); // (2). 算法书写 // 3. 题目:打印出所有的"水仙花数(narcissus number)",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 // (1). 算法分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 // (2). 算法书写 int ge, shi, bai, he; for (int i = 100; i < 1000; i++) { ge = i % 10; shi = i / 10 % 10; bai = i / 100 % 10; he = (int) Math.pow(ge, 3) + (int) Math.pow(shi, 3) + (int) Math.pow(bai, 3); if (he == i) { System.out.println(i); } } // 4. 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 // (1). 算法分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: // (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 // (2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 // (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 // (2). 算法书写 Scanner sc = new Scanner(System.in); System.out.println("请输入一个大于2的正整数:"); int input = sc.nextInt(); int a = 2; System.out.print(input + "="); while (true) { if (a == input) { System.out.print(a); break; } if (input % a == 0) { input = input / a;//商作为新的input System.out.print(a + "*"); } else { a++; } } // 5.题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 // (1). 算法分析:(a>b)?a:b这是条件运算符的基本例子。 System.out.println("请输入学习成绩:"); double score = sc.nextDouble(); System.out.println((score >= 90) ? "A" : (score < 90 && score >= 60 ? "B" : "C") ); } }
古典算法题
最新推荐文章于 2022-10-29 23:12:47 发布