兔群繁殖之谜|豆包MarsCode AI刷题

52 阅读3分钟

问题描述

生物学家小 R 正在研究一种特殊的兔子品种的繁殖模式。这种兔子的繁殖遵循以下规律:

  1. 每对成年兔子每个月会生育一对新的小兔子(一雌一雄)。
  2. 新生的小兔子需要一个月成长,到第二个月才能开始繁殖。
  3. 兔子永远不会死亡。

小 R 从一对新生的小兔子开始观察。他想知道在第 A 个月末,总共会有多少对兔子。

请你帮助小 R 编写一个程序,计算在给定的月份 A 时,兔子群体的总对数。

注意:

  • 初始时有 1 对新生小兔子。
  • 第 1 个月末有 1 对兔子:原来那对变成了成年兔子,并开始繁殖。
  • 第 2 个月末有 2 对兔子:原来那 1 对成年兔子,繁殖了 1 对新生的小兔子。
  • 从第 3 个月开始,兔子群体会按照上述规律增长。

输入

一个整数 A(1 ≤ A ≤ 50),表示月份数。

返回

一个长整数,表示第 A 个月末兔子的总对数。

测试样例

样例1:

输入:A = 1
返回:1

样例2:

输入:A = 5
返回:8

样例3:

输入:A = 15
返回:987

代码:

def solution(A):
if A == 1 or A == 0:
    return 1
prev2 = 1  # F(A-2)
prev1 = 1  # F(A-1)
current = 0  # F(A)
for _ in range(2, A + 1):
    current = prev1 + prev2
    prev2 = prev1
    prev1 = current
return current

if __name__ == "__main__":
# 测试用例
print(solution(1) == 1)
print(solution(5) == 8)
print(solution(15) == 987)

代码解读: 这段代码是一个Python程序,用于计算斐波那契数列中的第n项。斐波那契数列是一个著名的数列,其中每一项都是前两项的和,通常定义为:F(0) = 0, F(1) = 1, 且对于 n > 1, 有 F(n) = F(n-1) + F(n-2)。

下面是代码的详细解释:

  1. 函数定义

    • def solution(A): 定义了一个名为 solution 的函数,它接受一个整数参数 A,表示要计算的斐波那契数列的项数。
  2. 基本情况

    • if A == 1 or A == 0: 如果 A 为 0 或 1,直接返回 1,因为斐波那契数列的第0项和第1项都是1。
  3. 初始化变量

    • prev2 = 1prev1 = 1 分别初始化两个变量为斐波那契数列的前两项,即 F(A-2) 和 F(A-1)。
    • current = 0 初始化一个变量 current 用于存储当前计算的斐波那契数。
  4. 循环计算

    • for _ in range(2, A + 1): 循环从第2项开始,直到第 A 项。
    • current = prev1 + prev2 计算当前斐波那契数,即前两项的和。
    • prev2 = prev1prev1 = current 更新前两项的值,为下一次循环做准备。
  5. 返回结果

    • return current 返回计算出的斐波那契数列的第 A 项。
  6. 主程序

    • if __name__ == "__main__": 这部分代码在直接运行该脚本时执行。
    • print(solution(1) == 1)print(solution(5) == 8)print(solution(15) == 987) 是测试用例,用于验证函数的正确性。

注意:在测试用例中,print(solution(15) == 987) 是不正确的,因为斐波那契数列的第15项实际上是 610,而不是 987。正确的测试用例应该是 print(solution(15) == 610)