题目
有五个猴子,分一堆桃子;第一个猴子过来把桃分了5份,多出一个桃,它拿走了其中一份和多出来的一个桃;第二个猴子把剩下的桃再分了5份,也多出了一个桃,它像第一个猴子那样拿走了其中一份和多出来的一个桃;后面3个猴子也遇到了第一和第二个猴子的情况,也做出了同样的选择;请问至少有多少个桃?
解题
这里我们不知道最后一个猴子分桃时平均每个猴子能分多少个桃,有人可能会认为“至少”当然是1个桃啦,这是不对的,因为如果是这样的话,那第4个猴子分给4个猴子时总共分了1 * 5 + 1 = 6个桃,6不是4的倍数,所以不能这么想当然。
从题目来看,桃子总数必然是5的倍数,再加1,所以桃子数可以从6开始,如果桃子数不满足目题的要求,则加5,不断地重复该过程,直到桃子数满足题目要求。
伪代码:
x = 6
while 不满足题目要求:
x += 5
代码
python
def get_peaches(monkeys):
# 初始化桃子数
peaches = monkeys + 1
# 判断桃子是否够分
while not is_dividable(peaches, monkeys):
# 递增
peaches += monkeys
return peaches
def is_dividable(peaches, monkeys):
for _ in range(monkeys):
peaches -= 1
if peaches % monkeys != 0:
return False
peaches = (peaches // monkeys) * (monkeys - 1)
return True