您的位置:首页 > 编程语言

2016京东在线笔试(编程题之一)

2015-09-19 22:05 357 查看
最初这个题目应该是五猴分桃,想必大家也不陌生,京东只是把五只猴子变成了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)个桃子。

这样子的话实现代码就非常简单喽。

当然还有其他方案,如利用循环之类的,就不一一道来啦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: