最初这个题目应该是五猴分桃,想必大家也不陌生,京东只是把五只猴子变成了N只。
也就是有N个猴子,一堆桃子,第一个猴子来了,分成N分后多了一个,于是他把多出来的扔了,拿走了N份中的1份;
第二个猴子又来了,把剩下的桃子也分成了N分,多了一个扔了,也拿走了N份中的1份;
然后第三只猴子······直到第N只猴子,以此类推,问这队桃子至少有多少个呢?
解题方法网上提供了很多,这里与大家分享个人认为最好理解的一个答案:
不知道亲们有没有听过分马的故事:
一个老人临终有17只马,三个儿子,并在遗嘱上写着:“我把十七匹马全都留给我的三个儿子。
长子得一半,次子得三分之一,给幼子九分之一。不许流血,不许杀马。你们必须遵从父亲的遗愿!”
这下可难倒了三个儿子了,怎么分呢?有一位智者给出了答案。
这位智者从邻居家借来一匹马,分给大儿子一半,也就是9只,二儿子三分之一,也就是6只,
小儿子九分之一,也就是2只,刚好剩下一匹再换给邻居,于是就愉快的分完啦!
当然,这里也有人说加了一只就不是原概念上的一半或是三分之一了,但其本身1/2 + 1/3 + 1/9 =17/18 全部分配的概率就不是1。
但这是一种非常好的解决方法。
于是我们先借来N-1个桃子,此时假设共有X个桃子;
那么第一只猴子拿去了X/N,还剩(1-1/N)*X;
同理,第二只猴子拿走桃子后还剩(1-1/N)*(1-1/N)*X;
以此类推,最后一只猴子拿走后还剩(1-1/N)*···(N次相乘)···*(1-1/N)*X;
那么最终剩下的桃子数目必须是整数,即X需要等于N的N次方,
还掉借来的N-1个桃子,原来最少需要有X-(N-1)个桃子。
这样子的话实现代码就非常简单喽。
当然还有其他方案,如利用循环之类的,就不一一道来啦。