算法题:母牛的故事 解析 python编程
题目:
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
分析:
年 | 数量 |
---|---|
1 | 1(一只母牛) |
2 | 1(母牛生的小母牛) |
3 | 1(母牛生的小母牛) |
4 | 1(母牛生的小母牛) |
5 | 2(第一年母牛和第二年母牛生的小母牛) |
6 | 3(第一、二、三生的) |
7 | 4(第一、二、三、四生的) |
8 | 6(第一、二、三、四、五生的) |
|
年 | 总数 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 6 |
6 | 9 |
7 | 13 |
8 | 19 |
这道题困惑了我好久,首先我以为母牛第一年就生娃,以为计算总数就是小母牛的数量,这样算的话到第八年就会出错。年份第一年就是出生那年,我想的是出生后的一年。
代码分析:
while(True):
sum = 0 计算母牛和小母牛的总数
s = [0, ] 将母牛数量加入列表
n=int(input()) 输入年数
if(n==0): 输入0退出
break
for i in range(1,n+1): 遍历年数
if(i<=4): 小于等于四年每年只有一只母牛(第一年只有母牛,第二年才有小母牛)
m=1
s.append(m)
if(i>4): 大于四年两年前的小母牛都长成母牛(比如6年有三只小母牛是第一年、第二年、第三年生的)
t = 0 计算n的前两年母牛总数
for j in s[0:i-2]: 遍历列表从0到n的前两年的数量
t += j 再全部加起来
s.append(t)
for i in s: 最后遍历列表,将全部元素加在一起计算母牛和小母牛的总数
sum += i
print(sum)
源代码:
while(True):
sum = 0
s = [0, ]
n=int(input())
if(n==0):
break
for i in range(1,n+1):
if(i<=4):
m=1
s.append(m)
if(i>4):
t = 0
for j in s[0:i-2]:
t += j
s.append(t)
for i in s:
sum += i
print(sum)