题目:
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入:
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出:
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例输入
2
4
5
0
样例输出
2
4
6
个人思考:刚开始一直在纠结是不是题目有点问题?原因如下:
题意为第1~4年母牛的数量分别与其年数对应,给出的样例输入和输出第5年的母牛头数为:4+1+1(即去年的母牛数量+老母牛第5年年初生的一头+小母牛中的老大在今年年初(也即其第四个年头)也生了一头小小母牛)。我觉得小母牛老大是不是早产,提前一年生了,否则的话就是老母牛在第一年年初生下小母牛,然后将第一年也算进去,到第二年年初的时候小母牛也过了一年(即离它第一次生下小小母牛只剩三年),然后到第5年就刚好也是小母牛的老大第4个年头,那第5年的母牛数量为6头,这样理解的话,答案是正确的,但是第一年不应该是2头母牛吗(即母牛+其刚生小母牛)?为什么题意是1头呢,按照第一年是1头母牛来理解,那第5年只是第一头小母牛第3个年头的时候,即总母牛数应该是5,但正确答案为6...
额......................
可能我是牛角尖爱好者吧,但是题目还是得做的
根据输入输出样例,可以得出后面几年的母牛头数,总结其规律为:
第n年母牛的数量=第n-1年的数量+第n-3年母牛的数量
似曾相识的规律,
斐波那契数列路过......
代码如下:
#母牛的故事(递归)
t=[]#创建空列表,索引对应年数,其值对应母牛数
for i in range(0,5): #列表初始化1~4年的母牛
t.append(i)
for j in range(5,55):#直接预处理范围内年数对应的母牛数
t.append(t[j-1]+t[j-3])
while True:
n = eval(input())
if n>0:
print(t[n])
elif n==0:
break
运行结果: