古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? ---要求用数组
时间: 2024-09-15 18:07:34 浏览: 69
JAVA经典算法,有可能在面试中出现的题目哟.doc
这个问题实际上是一个经典的动态规划问题,可以用数组来模拟兔子的数量随时间的增长。我们设`rabbitCount[i]`表示第i个月兔子的总数。
初始条件:第0个月只有原始的一对兔子,即`rabbitCount[0] = 1`。
递推公式:由于兔子每月成对繁殖,所以第i个月的兔子数量等于前一个月兔子数量加上第i-1个月出生的新兔子(因为新出生的兔子在第i个月开始可以繁殖)。数学表达式就是 `rabbitCount[i] = rabbitCount[i-1] + rabbitCount[i-2]`。
因为题目特别提到,每个月的新生兔子都是前一个月兔子数量的两倍,所以我们其实不需要两次递推,只需要一次就可以得到结果。因为第i个月的兔子数量包括了第i-1个月的成年兔子和第i-2个月刚出生的兔子。
以下是使用数组求解的一个简单示例:
```java
public int rabbitsPerMonth(int months) {
int[] rabbitCount = new int[months + 1];
rabbitCount[0] = 1; // 第0个月有1只兔子
rabbitCount[1] = 1; // 第1个月还是1只兔子
for (int i = 2; i <= months; i++) {
rabbitCount[i] = rabbitCount[i - 1] + rabbitCount[i - 2]; // 新增一对兔子
}
return rabbitCount[months];
}
```
当调用`rabbitsPerMonth(months)`,传入月份数,即可得到该月的兔子总数。
阅读全文