题解 | #统计每个月兔子的总数#迭代解法

统计每个月兔子的总数

http://www.nowcoder.com/practice/1221ec77125d4370833fd3ad5ba72395

这道题目不是很难,但是我们必须要深刻理解题目的含义。

根据题意,我们可以知道,兔子有三种状态:

(1)年龄为3个月及以上:可以生产,设为num。

(2)年龄为2个月:不可以生产,设为num2。

(3)年龄为1个月:不可生产,刚出生,设为num1。

我们可以先分析输入输出,可以得出,我们最开始获得的是一只一个月的兔子,并不是一只成年的兔子,因此在最初的两个月中,该兔子需要成长,不能生育,这是需要特别注意的,题目没有具体说清楚。

因此,我们可以假设num,num1,num2初始值为0,针对第n月的情况,我们可以使用for循环处理,在循环中,需要特别处理前两个月的情况,因为这两个月,没有成年的兔子可以生育,当到达第三个月以及以后时,我们可以按照正常的逻辑进行处理。

首先,我们先讨论特例的情况。当n=1时,此时三种兔子都是0,加入第一只小兔子,设num1=1;当n=2时,没有成年的兔子可以生产,此时有一只兔子的年龄增加一岁。

当n>=3时,此时,已有可以生产的成年兔子了,num2增加一月,此时成年兔子为num=num+num2,而num1中的兔子年龄增加一月,num2=num1。当月新出生的兔子num1=num。

最后输出三种兔子的总和就是最终的结果。

while True:
    try:
        n = int(input())
        num = 0
        num1 = 0
        num2 = 0
        for i in range(n):
            num += num2
            num2 = num1
            if num==0 and num2 == 0:
                num1 = 1
            elif num==0 and num2 == 1:
                num1 = 0
            else:
                num1 = num 
        print(num+num1+num2)
        
    except:
        break
全部评论
总算有个人说的我看懂了,谢谢
1 回复 分享
发布于 2022-07-06 11:13
就是斐波那契数列
点赞 回复 分享
发布于 2022-03-22 21:54
好棒!
点赞 回复 分享
发布于 2022-03-30 20:33
写得太棒了,很简单明了
点赞 回复 分享
发布于 2022-08-22 15:59 广西
num1初始值设为1,能省掉后面多余的条件代码if elif / else
点赞 回复 分享
发布于 08-12 18:29 上海

相关推荐

10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
希望各位大哥分享一下自己的看法,对于机器人行业确实不太了解
绝顶但不聪明:如果是机器人相关岗位,优先优必选(专门***器人的),其他岗位选小米
投递小米集团等公司10个岗位 > 牛客解忧铺 牛客在线求职答疑中心
点赞 评论 收藏
分享
78 12 评论
分享
牛客网
牛客企业服务