豆包MarsCode AI 越刷越牛逼,题目:生物学家小 R 正在研究一种特殊的兔子品种的繁殖模式。这种兔子的繁殖遵循以下规律:
- 每对成年兔子每个月会生育一对新的小兔子(一雌一雄)。
- 新生的小兔子需要一个月成长,到第二个月才能开始繁殖。
- 兔子永远不会死亡。
小 R 从一对新生的小兔子开始观察。他想知道在第 A 个月末,总共会有多少对兔子。
请你帮助小 R 编写一个程序,计算在给定的月份 A 时,兔子群体的总对数。这个问题实际上是一个经典的 斐波那契数列 问题。问题中的兔子繁殖规律和斐波那契数列的增长方式完全吻合,因此可以直接利用斐波那契数列来解决。
问题分析
-
初始情况:
- 第1个月只有1对兔子(即新生兔子)。
- 从第2个月开始,兔子数量增长的规律是:每对成年兔子每个月生育一对新兔子,而新兔子需要一个月才能变成成年兔子。
-
增长规律:
- 第1个月:1对兔子(初始兔子对)。
- 第2个月:1对成年兔子繁殖出1对小兔子,总共有2对兔子。
- 第3个月:原来的1对成年兔子继续繁殖,同时1对小兔子变为成年兔子,共有3对兔子。
- 第4个月:2对成年兔子繁殖,总共有5对兔子。
- 以此类推。
实际上,这就是 斐波那契数列 的应用,其中第 ( A ) 个月末兔子的总对数为斐波那契数列的第 ( A ) 项。
斐波那契数列的定义:
- ( F(1) = 1 ) (第一个月有1对兔子)
- ( F(2) = 1 ) (第二个月有1对兔子)
- 对于 ( A \geq 3 ),兔子的数量遵循 ( F(A) = F(A-1) + F(A-2) ),即当前月的兔子数量等于前两个月兔子数量之和。
代码实现
def solution(A: int) -> int:
# 初始条件
if A == 1:
return 1
elif A == 2:
return 2
# 定义两个变量用于记录前两个月的兔子对数
prev1, prev2 = 2, 1 # prev1 是 F(2), prev2 是 F(1)
for month in range(3, A+1):
current = prev1 + prev2 # 当前月兔子对数 = 前两个月兔子对数之和
prev2 = prev1 # 更新 prev2 为 prev1
prev1 = current # 更新 prev1 为当前月的兔子对数
return prev1
if __name__ == "__main__":
# Test cases
print(solution(1) == 1)
print(solution(5) == 8)
print(solution(15) == 987)
代码解析:
-
边界条件:
- 如果输入的月份是1或者2,直接返回对应的兔子对数。因为前两个月的兔子数是固定的,分别为1和2。
-
动态计算斐波那契数列:
- 从第三个月开始,使用
prev1和prev2来分别表示当前月和前一个月的兔子对数。 - 每次迭代计算当前月的兔子对数
current = prev1 + prev2,并更新prev1和prev2,直到计算到第 ( A ) 个月。
- 从第三个月开始,使用
-
时间复杂度:
- 时间复杂度:( O(A) ),需要遍历从第3个月到第 ( A ) 个月的所有月份来计算兔子对数。
- 空间复杂度:( O(1) ),只使用了常数空间存储前两个月的兔子对数。
测试案例
示例 1:
输入:A = 1
- 第1个月只有1对兔子,因此输出
1。
示例 2:
输入:A = 5
- 从第1个月到第5个月的兔子对数依次为
1, 2, 3, 5, 8,因此输出8。
示例 3:
输入:A = 15
- 第15个月兔子的对数是第15个斐波那契数,即
987。
总结
这道题实际上就是在求解斐波那契数列的问题。通过动态规划的方法,我们可以高效地计算出第 ( A ) 个月的兔子总对数。
MarsCode AI刷题的亮点
精选真题: MarsCode AI提供了大量的精选真题,这些题目来源于各大知名面试公司和编程竞赛。这种高质量的题目不仅涵盖了广泛的算法和数据结构知识,而且还能够帮助用户提前适应面试中的真实场景,提升解决问题的能力。
学习的重要性与独特价值
- 个性化题目推荐:平台根据用户的水平和进度,推荐适合的题目,确保每位用户都能在合适的挑战中成长。
- 云端编辑器:提供便捷的在线编程环境,用户可以随时随地进行练习,无需安装任何软件,增强了学习的灵活性。
刷题实践
优势总结:
- 实时反馈:每次提交代码后,系统会即时返回结果,帮助用户快速识别和纠正错误,极大提高了学习效率。
- 社区交流:平台鼓励用户在讨论区分享解题思路和技巧,促进知识的分享与交流,营造了良好的学习氛围。
实践案例: 例如,在我使用MarsCode AI刷题时,遇到了一个难度较大的动态规划问题。平台的个性化推荐功能给我提供了相关的基础题目,帮助我逐步掌握所需的知识点。通过不断练习和利用云端编辑器的便利,我的解题能力显著提升,并成功地在实际面试中应对了类似的问题。
总之,MarsCode AI的多种功能为学习者提供了一个全面而高效的学习平台,使得刷题变得更加有趣和有效。通过这样的平台,我能在真实的学习环境中快速提升自己的技能。