介绍
环境

问题分析
理清题目要点
母牛题目,首先是母牛每年可以生一只小牛,而小牛到4年成熟期也会每年生一只小牛,如下,随便画的嘿嘿,相当于这样,依次深入,递归策略可做

代码分析
初始化一个母牛列表集
初始化母牛列表集并添加一只母牛到列表中,初始化年份,并给定母牛的相关属性——年份,这也是我们后续判断是否添加新母牛的凭据
1 2 3 4 5
| year = 30 cowList = []
cowList.append({ "year":4})
|
核心代码
外层for循环为循环多少年份,需要计算多少年后牛的数量[值得注意的是减去1是因为数组从0开始,注意]
给定一个新母牛列表,用于添加新生成的小母牛数量
内层循环用于遍历已有的母牛的数量,并基于母牛的年份属性来判断(year>4)是否需要生成新的小牛
如果牛年份大于4,则给temp新母牛列表添加一个初始化cowInit
的小牛,初始年份为1,并不管是否生成,原有牛的年份增加1
`<span style="color:red">`[注意]:在牛年份等于3时候,在year自增1时候,当年的牛也会生产一只小牛,否则会出现数量缺失
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| for item in range(year-1): temp = [] for c in range(len(cowList)): if(cowList[c]['year'] >=4): temp.append(cowInit.copy()) cowList[c]['year'] = cowList[c]['year'] + 1 else: cowList[c]['year'] = cowList[c]['year'] + 1 if(cowList[c]['year'] ==4): temp.append(cowInit.copy()) cowList.extend(temp.copy())
|
最后Python自带内置的列表方法extend
合并temp列表到母牛列表cowList中,就完成了一年的牛数量与年份的增加,外层循环以此类推
结果
打印cowList母牛列表的数量,就是母牛的总数量

完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| year = 30
cowInit ={ "year":1 }
cowList = []
cowList.append({ "year":4})
for item in range(year-1): temp = [] for c in range(len(cowList)): if(cowList[c]['year'] >=4): temp.append(cowInit.copy()) cowList[c]['year'] = cowList[c]['year'] + 1 else: cowList[c]['year'] = cowList[c]['year'] + 1 if(cowList[c]['year'] ==4): temp.append(cowInit.copy()) cowList.extend(temp.copy())
print("第%s年的牛数量为:%d"%(year,len(cowList)))
|
结尾
感觉这样写还是不够优雅,时间复杂度为On2,其实有更好的方法可以自行研究
啊这,先这样吧,阿巴阿巴,2021祝自己新年快乐