海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只
猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了
一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,
问海滩上原来最少有多少个桃子?
这题怎么做?
怎样编程
7楼death_boy的解法很棒,一开始没看懂,尝试理解了一下:
假设最初香蕉的数量为:x,一定存在一个数:y,使得x+y=m,m能够被5整除且减去m/5后,仍旧能被5整除,如此能被整除5次(第5只猴子发现拿走),
m必定是5的倍数,最小是5^5
即 x+y=m=5^5;只要知道y的值,就能知道x的值,即x=5^5-y
m是最小值,x确定的情况下,y要尽可能小,所以y的值从1开始遍历,代码如下
using System;输出结果:y=4,x=3121
相对于遍历x(一般方法),遍历y的次数少很多
————————————————————————————
补充:7楼直接得出y=4 ,可以这样思考,只有剩下的香蕉是5的倍数才不余,要保证剩下是5的倍数,必须拿走的也是5的倍数,如果总是余1,也就是一开始就欠4个,导致后面总是需要从5中借4(想象将香蕉5个组成一个单元的铺开)
如此推论余2 欠8 余3欠12 余4欠16
我们甚至可以求任意数猴,扔任意香蕉数的方法