【每日一题0619】计算松鼠的数量

题目:有两只小松鼠,从出生开始第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年的松鼠,优化计数

关闭