题解 | #统计每个月兔子的总数#迭代解法
统计每个月兔子的总数
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