你好陌生人,请不要试图越过权限文章,谢谢!

算法——母牛的故事

介绍

环境

  • Python3.*


问题分析

理清题目要点

  母牛题目,首先是母牛每年可以生一只小牛,而小牛到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)):
#判断是否可以生产新母牛,若可以,则添加一个初始母牛给temp,并年岁加1
if(cowList[c]['year'] >=4):
temp.append(cowInit.copy())
cowList[c]['year'] = cowList[c]['year'] + 1
else:
cowList[c]['year'] = cowList[c]['year'] + 1
#如何year++后符合年数,则当年也新增一个母牛
if(cowList[c]['year'] ==4):
temp.append(cowInit.copy())
#新增母牛列表temp合并进母牛列表cowList中
cowList.extend(temp.copy())

  最后Python自带内置的列表方法extend合并temp列表到母牛列表cowList中,就完成了一年的牛数量与年份的增加,外层循环以此类推

结果

  打印cowList母牛列表的数量,就是母牛的总数量

1
2
#打印cowList的列表数量,就是母牛数量
print(len(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)):
#判断是否可以生产新母牛,若可以,则添加一个初始母牛给temp,并年岁加1
if(cowList[c]['year'] >=4):
temp.append(cowInit.copy())
cowList[c]['year'] = cowList[c]['year'] + 1
else:
cowList[c]['year'] = cowList[c]['year'] + 1
#如何year++后符合年数,则当年也新增一个母牛
if(cowList[c]['year'] ==4):
temp.append(cowInit.copy())
#新增母牛列表temp合并进母牛列表cowList中
cowList.extend(temp.copy())

#打印cowList的列表数量,就是母牛数量
print("第%s年的牛数量为:%d"%(year,len(cowList)))

结尾

感觉这样写还是不够优雅,时间复杂度为On2,其实有更好的方法可以自行研究

啊这,先这样吧,阿巴阿巴,2021祝自己新年快乐