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()