兔群繁殖之谜——题目解析及解题
问题描述
小R观察到这种特殊兔子品种的繁殖遵循以下规律:
- 每对成年兔子每个月会生育一对新的小兔子(一雌一雄)。
- 新生的小兔子需要一个月成长,到第二个月才能开始繁殖。
- 兔子永远不会死亡。
- 小R从一对新生的小兔子开始观察。
他想知道在第A个月末,总共会有多少对兔子。
输入与输出
- 输入:一个整数A(1 ≤ A ≤ 50),表示月份数。
- 返回:一个长整数,表示第A个月末兔子的总对数。
测试样例
- 样例1:输入A = 1,返回1。
- 样例2:输入A = 5,返回8。
- 样例3:输入A = 15,返回987。
解题思路
这个问题实际上是一个经典的斐波那契数列问题。斐波那契数列是一个每一项都是前两项和的数列,通常形式为:0, 1, 1, 2, 3, 5, 8, 13, 21, ...。在这个问题中,我们可以看到,每个月的兔子对数也是前两个月兔子对数的和。
代码实现
def solution(A: int) -> int:
if A == 1:
return 1
elif A == 2:
return 2
# 初始化前两个月的兔子对数
prev1, prev2 = 1, 2
# 计算从第三个月开始每个月的兔子对数
for i in range(3, A + 1):
current = prev1 + prev2
prev1, prev2 = prev2, current
# 返回第A个月的兔子对数
return prev2
if __name__ == "__main__":
# Add your test cases here
print(solution(1) == 1)
print(solution(5) == 8)
print(solution(15) == 987)
代码解析
- 边界条件处理:首先,我们处理了A为1和2的边界情况,因为这两个月份的兔子对数是已知的。
- 初始化变量:我们使用
prev1和prev2来存储前两个月的兔子对数,初始值分别为1和2。 - 循环计算:从第三个月开始,我们使用一个循环来计算每个月的兔子对数。每个月的兔子对数是前两个月兔子对数的和,我们将其存储在
current变量中,然后将prev1和prev2更新为上个月和当前月的兔子对数。 - 返回结果:最后,我们返回第A个月的兔子对数。