兔群繁殖之谜-MarsCode AI刷题

58 阅读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

  1. 函数定义:
python

-   []()
-   []()
-   []()

def solution(A: int) -> int:

-   定义了一个名为 `solution` 的函数,接受一个整数 `A` 作为参数,并返回一个整数。
  1. 边界条件:

    python

    if A == 1:

        return 1

    elif A == 2:

        return 2

    • 如果 A 为 1,直接返回 1,因为第 1 个月末只有 1 对兔子。
    • 如果 A 为 2,直接返回 2,因为第 2 个月末有 2 对兔子。
  2. 动态规划初始化:

    python

    a, b = 1, 2

    • 初始化两个变量 a 和 b,分别表示第 1 个月和第 2 个月的兔子对数。
  3. 动态规划迭代:

    python

    for i in range(3, A + 1):

        a, b = b, a + b

    • 从第 3 个月开始,使用动态规划的思想,每次迭代更新 a 和 b 的值。
    • a 和 b 的更新规则是:a 变为上个月的 bb 变为上个月的 a 和 b 的和。
  4. 返回结果:

    python

    return b

    • 最终返回 b,即第 A 个月末的兔子总对数。
  5. 测试样例:

    python

    if name == "main":

        print(solution(1) == 

        1)  # 第1个月有 1 对兔子

        print(solution(5) == 

        8)  # 第5个月有 8 对兔子

        print(solution(15) == 

        987)  # 第15个月有 987 对

        兔子

    • 在 __main__ 模块中,通过测试样例来验证函数的正确性。
    # 用动态规划来计算第 A 个月末兔子的对数
    if A == 1:
        return 1
    elif A == 2:
        return 2
    
    # 初始化前两个值
    a, b = 1, 2
    for i in range(3, A + 1):
        a, b = b, a + b
    
    return b

if __name__ == "__main__":
    # 测试样例
    print(solution(1) == 1)  # 第1个月有 1 对兔子
    print(solution(5) == 8)  # 第5个月有 8 对兔子
    print(solution(15) == 987)  # 第15个月有 987 对兔子

总结

  • 算法思路: 你的代码使用了动态规划的思想,通过迭代更新前两个月的兔子对数来计算第 A 个月末的兔子总对数。
  • 时间复杂度: 代码的时间复杂度为 O(A),因为需要进行 A-2 次迭代。
  • 空间复杂度: 代码的空间复杂度为 O(1),因为只使用了常数个额外变量。
  • 正确性: 代码逻辑正确,能够正确计算出第 A 个月末的兔子总对数。