题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

思路:可以从第五个猴子开始,从后往前推。最后一个猴子分成五份还多一个,假设最后一个猴子拿1个桃,最后至少有5*1+1=6个桃子。

请你试一试,编写程序计算原来有多少个桃子。


参考答案思路及程序代码:

假设第五只猴子拿走j个桃,那么最后海滩上还剩x个桃,x=4*j,开始倒推,第五只猴子没拿之前海滩上就有x/4*5+1个桃子。

根据这个思路,我们从j=1开始,反推每只猴子拿桃之前海滩上桃子的个数,这个数需要满足一个条件就是能被4整除(上一只猴子拿走之后剩下的均分了4等份)如果每次桃子的个数都满足,那么就得到了结果。

#!/usr/bin/python

# -*- coding: UTF-8 -*-

if __name__ == '__main__':

   i = 0 #控制循环次数,(第五只到第一只)

   j = 1 #最后一个猴子拿走的桃子个数

   x = 0 #剩下的桃子个数

   while (i < 5) :

       x = 4 * j #第五只猴拿走后海滩剩下桃的个数

       for i in range(0,5) :

           if(x%4 != 0) :

               break

           else :

               i += 1

           x = x/4 * 5 +1 #上一只猴拿走后海滩剩下桃的个数

       j += 1

   print (x)