JAVA算法实例:素数判断与水仙花数

需积分: 10 0 下载量 171 浏览量 更新于2024-07-24 收藏 949KB DOC 举报
"编程题目解析与实现" 在编程领域,经典的算法和问题解决能力是衡量一个程序员技能的重要标准。以下是对给定文件中提及的几个编程题目的详细解析和相关知识点: 1. **古典问题:兔子繁殖问题(Fibonacci数列)** 这个问题涉及到斐波那契数列,它是一个典型的递归问题。斐波那契数列的规律是:每个数是前两个数的和,起始数字为1。在Java中,可以使用递归或迭代两种方法来实现。 - **递归方法**: ```java public static int f(int x) { if (x == 1 || x == 2) return 1; else return f(x - 1) + f(x - 2); } ``` - **迭代方法**: 通常情况下,迭代方法比递归更有效率,因为它避免了重复计算和栈溢出的问题。 ```java public static int fibonacci(int n) { if (n <= 2) return 1; int prev1 = 1, prev2 = 1; for (int i = 3; i <= n; i++) { int temp = prev1; prev1 += prev2; prev2 = temp; } return prev1; } ``` 2. **素数判断问题** 判断一个数是否为素数,通常采用的方法是从2开始,依次检查到该数的平方根,看是否有因子。如果存在因子,那么这个数不是素数;反之,就是素数。 ```java public boolean isPrime(int num) { if (num <= 1) return false; for (int i = 2; i <= Math.sqrt(num); i++) { if (num % i == 0) return false; } return true; } ``` 在上述代码中,我们优化了检查范围,只检查到数的平方根,因为一个合数一定可以表示为两个数的乘积,其中一个因子不大于其平方根。 3. **水仙花数问题** 水仙花数是指一个三位数,它的每一位数字的立方和等于它本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。 ```java public void printNarcissisticNumbers() { for (int i = 100; i < 1000; i++) { int a = i / 100; int b = (i / 10) % 10; int c = i % 10; if (a * a * a + b * b * b + c * c * c == i) System.out.println(i); } } ``` 在这段代码中,我们遍历100到999之间的所有三位数,计算每一位的立方和,然后与原数比较。 这些编程题目涉及到了基础的算法设计、递归、迭代、数学计算以及循环控制等基础知识。通过解决这些问题,可以提高编程思维和问题解决能力,对于学习和理解计算机科学的核心概念非常有帮助。