Java编程题解析:从兔子问题到水仙花数

4星 · 超过85%的资源 需积分: 10 68 下载量 155 浏览量 更新于2024-07-22 4 收藏 949KB DOC 举报
"Java经典编程试题集合,包含40个示例,适合初学者和面试准备,涵盖了算法和基础编程技巧。" 这篇摘要提供的是关于Java编程的经典问题和解决方案,涉及了递归算法、素数判断以及特定数字类型的识别。以下是这些知识点的详细解释: 1. **斐波那契数列**:程序1解决的问题是计算斐波那契数列的前20项。斐波那契数列是一个序列,其中每个数字是前两个数字的和,通常以0和1开始:0, 1, 1, 2, 3, 5, 8, 13, 21, ...。代码展示了两种实现方式:一种是直接在主类中递归计算,另一种是将递归函数封装到单独的类中。 ```java // 直接在主类中的递归方法 public static int f(int x) { if (x == 1 || x == 2) return 1; else return f(x - 1) + f(x - 2); } // 封装到单独类中的递归方法 class Math { public int f(int x) { if (x == 1 || x == 2) return 1; else return f(x - 1) + f(x - 2); } } ``` 2. **素数判断**:程序2的任务是找出101到200之间的所有素数。素数是大于1且只有1和其本身两个正因数的自然数。代码通过检查每个数是否能被2到其平方根之间的任何数整除来判断。如果存在整除的情况,那么该数不是素数。否则,它是素数。 ```java class Math { public boolean isZhishu(int x) { for (int i = 2; i <= x / 2; i++) { if (x % i == 0) return false; } return true; } } ``` 3. **水仙花数**:程序3涉及到寻找“水仙花数”,这是一个三位数,其每一位数字的立方和等于它本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。代码会遍历100到999之间的所有数字,检查它们是否为水仙花数。 ```java public class Exp3 { public static void main(String[] args) { for (int i = 100; i <= 999; i++) { if (isNarcissistic(i)) System.out.println(i); } } public static boolean isNarcissistic(int num) { int sum = 0; int copyNum = num; while (copyNum != 0) { int digit = copyNum % 10; sum += Math.pow(digit, 3); copyNum /= 10; } return num == sum; } } ``` 以上三个示例展示了Java基础编程技能,包括递归、循环、条件判断和数值操作。这些问题不仅适合初学者练习,也是面试中常见的编程题,帮助开发者提高逻辑思维和问题解决能力。