五人分鱼--基于python3.0

A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。

日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。

B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。 。

C、D、E依次醒来,也按同样的方法拿鱼。

问他们至少捕了多少条鱼?

问题分析:

每个人按照以下规则分鱼并拿走自己的那一份:

A:(x-1)/5
B:(x-((x-1)/5)-1)/5
C:(x-((x-1)/5)-((x-((x-1)/5)-1)/5)-1)/5
D:(x-((x-1)/5)-((x-((x-1)/5)-1)/5)-((x-((x-1)/5)-((x-((x-1)/5)-1)/5)-1)/5)-1)
E:(x-((x-1)/5)-((x-((x-1)/5)-1)/5)-((x-((x-1)/5)-((x-((x-1)/5)-1)/5)-1)/5)-((x-((x-1)/5)-((x-((x-1)/5)-1)/5)-((x-((x-1)/5)-((x-((x-1)/5)-1)/5)-1)/5)-1))-1)

问题转化为从1开始寻找一个可以满足上述规则的最小整数

def main():
    #默认鱼的数量至少是一条
    fish = 1
    while True:
        total,enough = fish,True
        #五个人都按照这样的规则来分鱼
        for _ in range(5):
            #如果扔掉一条鱼后恰好可以分为五份
            if (total-1)%5 == 0:
                #扔掉一条鱼,然后分为五份,拿走自己的那一份
                total = (total-1)//5*4 #运算过后的total的值是此次进行分配的人拿走自己的那一份之后剩下的
            #如果这个人按照这种方法不够分,说明不满足规则
            else:
                enough = False
                break

        #如果够分,输出鱼的总数
        if enough:
            print("鱼的总数是",fish)
            break
        #每一次循环,鱼的数量都增加1来寻找满足规则的最小值
        else:
            fish+=1
main()

        

上一篇:hover 背后的数学和图形学


下一篇:leetcode76.最小覆盖子串(困难)