利用逻辑分析(非公式)统计母牛生子问题(python3)
问题内容:有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
def cow_num_add():
cow_list = [] #存储除初始母牛外的所有长大后的母牛,其中每个元素代表一头母牛
n = int(input())
if n == 0:
pass
elif n < 5:
print(n)
else:
num01 = 0
for i in range(n-4): #第五年开始才会有新的母牛长成
cow_list.append(0) #向子代母牛列表中添加一头长大的母牛
list_long = 0 #记录子代母牛在列表中的位置,方便更改其后代数目
if cow_list.count(3)!=0:
# 每个母牛最多拥有3个小牛,当子牛数目在列表中的元素为3时,代表着每有一个元素3,下一年都会多出一头新的母牛
# 但是当元素第一次为3时,又不会增加新的母牛
# 因此将num01代表前一年元素3即长成母牛的数量,下一年新增母牛的数量,就是前一年原本拥有的元素为3的母牛的数量
num01 = cow_list.count(3)
for cow_num in cow_list:
if cow_num<3: #给子代母牛添加后代
cow_num += 1
cow_list[list_long] = cow_num
list_long+=1
elif cow_num == 3:
list_long += 1
if num01 != 0:
for i in range(num01):
cow_list.append(1)
cow_add = 0
for cow in cow_list:
cow_add+=cow
print(4+len(cow_list)+cow_add) # 4:初始母牛和其在四年后应有的子牛数量总和
# len(cow_list) : 后代母牛总和
# cow_add: 后代母牛对应子牛的总和
if __name__ == '__main__':
while True:
cow_num_add()