问题描述:
五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了相等的五堆,多出一只。于是,它吃掉了一个,拿走了一堆; 第二只猴子起来一看,只有四堆桃。于是把四堆合在一起,分成相等的五堆,又多出一个。于是,它也吃掉了一个,拿走了一堆;......其他几只猴子也都是 这样分的。问:这堆桃至少有多少个?
##本算法从最后一个猴子进行逆向推倒 def peach(monkey=5): pea = 4 ##最后一个猴子分完剩余的桃子 while 1: num = pea for i in range(monkey): num = num + num / 4 + 1 if num % 1 != 0: ##如果分出了小数则结束内层循环 pea += 4 ##最后的桃子一定是4的整数倍 break if num % 1 == 0: ##如果是整分 则结束 break return pea, num if __name__ == '__main__': pea, num = peach() print(pea, num)