Java编程:经典算法实例解析

需积分: 9 2 下载量 179 浏览量 更新于2024-09-18 收藏 49KB TXT 举报
"Java经典问题算法大全" 在Java编程中,算法是解决问题的关键,而解决经典问题的算法有助于提升编程技巧和思维能力。本资源涵盖了三个经典的Java算法问题,包括斐波那契数列、寻找指定范围内的素数数量以及找出特定范围内的水仙花数。 1. **斐波那契数列**: 斐波那契数列是一个非常著名的数列,定义为:每个数字是前两个数字的和。初始值为0和1。给定的问题中,程序计算了前15个月斐波那契数列中的第i个月的兔子对数。这里的代码实现了一个简单的for循环,通过迭代计算每一个月的兔子对数。在每次迭代中,当前的f2(即当前月的兔子对数)更新为f1(上个月的兔子对数)加上f(上上个月的兔子对数),然后f1再更新为f2。最后,程序将结果输出。 ```java public static final int MONTH = 15; public static void main(String[] args) { long f1 = 1L, f2 = 1L; long f; for (int i = 3; i < MONTH; i++) { f = f2; f2 = f1 + f2; f1 = f; System.out.print(i + "个月的兔子对数:"); System.out.println(f2); } } ``` 2. **寻找素数**: 第二个问题是找出101到200之间的所有素数。素数是大于1且只有1和其本身能整除的自然数。这里采用的方法是遍历从2到当前数的平方根,检查是否能被整除,如果能则不是素数。如果没有任何因子能整除,那么该数就是素数,并将其打印出来。最后,统计并输出这个范围内找到的素数总数。 ```java public static int count = 0; public static void main(String[] args) { for (int i = 101; i < 200; i++) { boolean b = true; // 假设当前数是素数 for (int j = 2; j <= Math.sqrt(i); j++) { if (i % j == 0) { b = false; // 如果发现因子,标记为非素数 break; } } if (b) { count++; System.out.print(i + ""); } } System.out.println("\n共找到" + count + "个素数"); } ``` 3. **水仙花数**: 水仙花数(Narcissistic Number)是指一个三位数,它的每一位数字的立方和等于它本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。此问题中,程序遍历101到999,检查每个数是否为水仙花数。方法是将数字拆分为三位,分别计算它们的立方和,如果等于原始数,则是水仙花数。 ```java public static void main(String[] args) { for (int num = 101; num < 1000; num++) { ThirdNarcissusNum tnn = new ThirdNarcissusNum(); tnn.f(num); } } public void f(int m) { int b, bb, bbb; // 拆分数字 b = m / 100; bb = (m / 10) % 10; bbb = m % 10; // 计算立方和 int sum = b * b * b + bb * bb * bb + bbb * bbb * bbb; // 检查是否为水仙花数 if (sum == m) { System.out.println(m + " 是水仙花数"); } } ``` 这些Java算法示例涵盖了基础的数学问题,如递推序列、素数判断和数字特性分析,对于学习和理解算法有很好的帮助。通过实践这些经典问题,可以加深对Java语言特性和控制结构的理解,同时提高解决问题的能力。