题目链接:五人分鱼
题目描述
A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份;B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份;C、D、E依次醒来,也按同样的方法拿鱼。
问他们至少捕了多少条鱼?
分析
1、直接暴力查最少捕获鱼的数量,题目链接有代码。
2、查最后一个人拿到鱼的数量,假设该数量为fish,该数量要可以满足4次 (fish * 5 + 1) % 4 == 0; fish /= 4。
代码
def main():
fish = 1
while True:
flag = 0
tfish = fish #最后一个人拿到的鱼
for _ in range(5):
fish = fish * 5 + 1 #前面人拿掉1/5剩下的鱼
if fish % 4 == 0:
flag += 1
fish /= 4 #前面人拿到的鱼
continue
else:
break
if flag == 4:
break
else:
fish = tfish + 1 #不行就第五个人再多拿一条鱼重试
print(f"至少捕获了{int(fish)}条鱼。")
if __name__ == '__main__':
main()