题目:有两只小松鼠,从出生开始第3个月,每个月都会生一对小松鼠。小松鼠3个月后,也可以继续生,松鼠寿命是10个月。假设第一个月有一对刚出生的小松鼠,第n个月有多少松鼠?
请编写一个函数,接收一个数字n,返回第n个月的松鼠的总数。
来源:同事分享
def rib(n):
if n <= 0:
return 0
elif n == 1 or n == 2:
return 1
else:
if n < 10:
return rib(n-1)+rib(n-2)
else:
return rib(n-1)+rib(n-2)-int((n/10))
i = int(input("输入月:"))
print(f"{i}月后小松鼠的数量为:{rib(i)}对")
"""
题目:有两只小松鼠,从出生开始第3个月,每个月都会生一对小松鼠。小松鼠3个月后,也可以继续生,松鼠寿命是10个月。假设第一个月有一对刚出生的小松鼠,第n个月有多少松鼠?
请编写一个函数,接收一个数字n,返回第n个月的松鼠的总数。
来源:同事分享
"""
def test(n):
def handle(rib_list):
i = 0
while i < len(rib_list):
if rib_list[i] > 10: # 大于10死亡,按照这个月不生育来计算,如果第10个月生育后死亡就不是这么算了
rib_list.pop(i)
continue
elif rib_list[i] >= 3: # 大于3新增,年限增长
rib_list.append(1)
rib_list[i] += 1
else: # 小于3年限增长
rib_list[i] += 1
i += 1
return rib_list
start = [1, 1]
result = start
while n > 0:
result = handle(start)
n -= 1
return len(result)
for h in range(1, 19):
print(str(h) + ": " + str(test(h) / 2))
"""
题目:有两只小松鼠,从出生开始第3个月,每个月都会生一对小松鼠。小松鼠3个月后,也可以继续生,松鼠寿命是10个月。假设第一个月有一对刚出生的小松鼠,第n个月有多少松鼠?
请编写一个函数,接收一个数字n,返回第n个月的松鼠的总数。
来源:同事分享
"""
def test(n):
def add_list(rib_list, s_start, s_end):
r = 0
for i in range(s_start, s_end):
r += rib_list[i]
return r
def handle(rib_list):
i = len(rib_list)
while i >= 2: # 年限增长1
rib_list[i - 1] = rib_list[i - 2]
i -= 1
born = add_list(rib_list, 2, 10) # 从第3-10年开始每个松鼠都生一个
rib_list[0] = born
return rib_list
start = [0 for i in range(10)]
start[0] = 2
result = start
while n > 1:
result = handle(start)
n -= 1
return add_list(result, 0, 10)
for h in range( 19):
print(str(h) + ": " + str(test(h) / 2))
只记录1-10年的松鼠,优化计数
可能理解的有问题,计算成 成长3个月,到第4个月才产仔了
def solution(n:int) -> int:
ss_duple = {"a":{"lifetime":0,"is_dead":False}}
for month in range(n):
key_arr = ss_duple.copy()
for ss_key in key_arr.keys():
ss = ss_duple[ss_key]
if ss["is_dead"] == True: continue
else:
ss["lifetime"] += 1
#死亡
if ss["lifetime"] == 10: ss["is_dead"] = True
#产仔
if ss["lifetime"] >3:
new_key = ss_key+str(month+1)
ss_duple[new_key] = {"lifetime":1,"is_dead":False}
# print(ss_duple)
all_num = 0
live_num = 0
for ss_key in ss_duple.keys():
all_num +=1
if ss_duple[ss_key]["is_dead"] == False: live_num +=1
print("总共有%d松鼠,活着的有%d松鼠" % (all_num*2, live_num*2))
return live_num*2