在网上翻到了答案
解题思路:
1. 获取输入的两个数值
2. 初始化一个月份长度的数组
3. 从零开始循环
4. 小于六个月单独处理
5. 大于六个月了每过一个月就对前六个月数据进行相应的处理
6. 最后计算数组和即可
优化思路:
在仔细读题后发现,所有的数量变化都是围绕着最近六个月的信息来进行变动的。
而且是每六个月一个周期进行循环(初始月份不在循环范围内)。
那么,我们的数组只需要六个位置即可。超过六个月的数据直接覆盖过期数据即可。ewwok = int(raw_input("Enter initial population of Ewwoks?"))
month = int(raw_input("Find population in month?"))
queue = [0,0,0,0,0,0]
for index in range(month):
if index == 0:
queue[0] = ewwok
else:
if index % 6 == 0: # 第1个月
queue[3] = max(0, int(queue[3]) - 1)
elif index % 6 == 1: # 第2个月
queue[1] = (int(queue[3]) + int(queue[5]) + int(queue[0])) * 2
elif index % 6 == 2: # 第3个月
queue[0] = max(0, int(queue[0]) - 1) # 首月可能减为负值
queue[5] = max(0, int(queue[5]) - 1)
elif index % 6 == 3: # 第4个月
queue[3] = (int(queue[5]) + int(queue[1]) + int(queue[0])) * 2
elif index % 6 == 4: # 第5个月
queue[1] = max(0, int(queue[1]) - 1)
elif index % 6 == 5: # 第6个月
queue[0] = 0 # 初始的会在第六个月全部死亡
queue[5] = (int(queue[1]) + int(queue[3])) * 2
return sum(queue)
# print queue
# print sum(queue)
print('Ewwok population in month ' + str(month) + ' is ' + str(sum(queue)))
|