【发布时间】:2021-06-21 16:03:29
【问题描述】:
这段代码解决了“猴子椰子”的问题,但我如何修改它以不仅找到初始解决方案,而且继续寻找解决方案?
(编辑)猴椰子问题: 五个人和一只猴子在一个岛上遇难。他们度过了第一个晚上收集椰子。夜里,一个人醒来,决定拿走他那份椰子。他把它们分成五堆。剩下一个椰子,他把它给了猴子,然后把他的那份藏起来,把剩下的放回去,然后继续睡觉。
很快第二个人就醒了,做了同样的事情。把椰子分成五堆,剩下一个椰子给猴子。然后他把他的那份藏起来,把剩下的放回去,然后回到床上。第三个、第四个和第五个男人遵循完全相同的程序。第二天早上,他们都醒了之后,把剩下的椰子分成了五份。这次没有留下任何椰子。
原来那堆椰子有多少?
def solve(sailors):
nuts = sailors
while True:
n0, wakes = nuts, []
for sailor in range(sailors + 1):
portion, remainder = divmod(n0, sailors)
wakes.append((n0, portion, remainder))
if portion <= 0 or remainder != (1 if sailor != sailors else 0):
nuts += 1
break
n0 = n0 - portion - remainder
else:
break
return nuts, wakes
【问题讨论】:
-
为什么
while True在一次迭代后你总是break?