Topic: 五猴分桃问题,大家都来试试。看看大家的解法。

今天无意中看到一个问题,五猴分桃:
原帖是这样的:

*************************
帖子
*************************

 5只猴子一起摘了一大堆桃子,晚上有一只猴子醒来发现其他猴子都睡着了,就起来吃了一个桃子,然后将剩余的桃子恰好平均分成5份,自己拿了其中的一份藏起来,然后去睡觉.第二只猴子醒来发现其他猴子都睡着了,就像第一只猴一样先吃了一个桃子,然后将其它的桃子又恰好平均分成5份,自已也拿了其中的一份藏起来,接着又去睡觉.第三只,第四只,第五只猴都像第一第二只猴一样做了,现问:这5只猴至少摘了多少个桃子???

  据说此题为狄拉克所出,并且他自已也没能找到简便的解法;李政道曾用此题考问中国科技大学少年班的学生,无人能答.
  都是牛人那,吓着了吧!!!赶紧试试...


****************************
原帖完
****************************


看到这个问题后,我想了想,解出了自己的答案。后来我想问原帖人答案,看看对不对。但原发贴人自己也没有答案。我很想看看大家是怎么解出自己答案的,并且想看看大家对这个问题理解,因此暂时不贴出我的答案,等到大家都提出自己的方案或解答后,我再贴出我的解答,然后和大家讨论。欢迎大家踊跃发言。

Re: 五猴分桃问题,大家都来试试。看看大家的解法。

晕,这个问题,吸引眼球还是费脑细胞??

《劝学》——少年易老学难成,一寸光阴未可轻。未觉池塘春草梦,阶前梧叶已秋声。

Re: 五猴分桃问题,大家都来试试。看看大家的解法。

数学奇烂无比的人飘过

寻找爱情就象在黑暗中寻找光明,总是朝着最亮的地方走.却往往不经意的错过了许多

Re: 五猴分桃问题,大家都来试试。看看大家的解法。

不是吸引眼球。就是想和大家交流交流。

Re: 五猴分桃问题,大家都来试试。看看大家的解法。

现在对数学问题有些摸不着头绪,不过这个用程序能够比较简单的实现了

永远不要试图满足所有人的需求,永远要试图满足所有人的操作。
. Blog: Just 平生一笑

Re: 五猴分桃问题,大家都来试试。看看大家的解法。

不准用程序,要用笔算.哈哈哈
突然想起了和差问题和工程问题...................不用方程式怎么做?

寻找爱情就象在黑暗中寻找光明,总是朝着最亮的地方走.却往往不经意的错过了许多

Re: 五猴分桃问题,大家都来试试。看看大家的解法。

呵呵。我就是用程序解决的。用程序解决的有些笨的感觉。不过一下子想不出太好的办法。

Re: 五猴分桃问题,大家都来试试。看看大家的解法。

看到这个问题的第一感是,找到初值,即第五只醒来的猴子看到眼前的桃子,然后吃了一个。拿走自己的。。。
居于这种想法,设计解决方案:

1,假设第五只猴子(最后一只)醒来时看到桃子的时候有n个桃子,吃掉一个后,每个猴子分一份,每份(n-1)/5,每份必须还是整数,除去第5个猴子的份量,总得还剩(n-1)*4/5.(这里原帖没有说清,最后剩下这些桃子还够不够五个猴子平分?假设不够吧。)
那么最小的整数n是6.

2,根据上面的讨论倒推第第四个猴子醒来时的桃子:设第四个猴子醒来时有x个桃子,吃了一个拿走自己那份,还剩6个桃子,即第 6=(1-x)*4/5;x必须是整数。。。

3,一次类推至第一个猴子醒来时的情况。

如果期间出现x为小数的情况,即认为初始值n不正确。按照n=5*k/4+1的式子递增n值,(如果n为整数,k必须是4的倍数,上述n=6时,k=4),重复1-3的步奏,直至找出第5只猴子醒来时看到总的桃子数目是整数时。即得答案。



之后根据方案写程序计算,程序源码:
// 五猴分桃.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "iostream.h"
int main(int argc, char* argv[])
{
long k,houzi=1,i=4,m_find=0;
float n;
    while (i<50000)
    {
  n=(float)i*5/4+1;
  if (n==(int)n)
  {
   houzi=1;
   while (houzi<6)
   {
    k=(long)n;
    n=(float)k*5/4+1;
    if (n==(int)n)
    {
     houzi++;
    }
    else
    {
     break;
   
    }
    if (houzi==5)
    {
     m_find++;
                    cout<<"第"<<m_find<<"次找到"<<endl;
     cout<<"总的桃子有"<<n<<"个"<<endl;
    }

   }
   i++;
  }
  else
  {
   i++;
  }
    }

return 0;
}


程序中初值定为k<50000的情况。执行结果:
第1次找到
总的桃子有3121个
第2次找到
总的桃子有6246个
第3次找到
总的桃子有9371个
第4次找到
总的桃子有12496个
第5次找到
总的桃子有15621个
第6次找到
总的桃子有18746个
第7次找到
总的桃子有21871个
第8次找到
总的桃子有24996个
第9次找到
总的桃子有28121个
第10次找到
总的桃子有31246个
第11次找到
总的桃子有34371个
第12次找到
总的桃子有37496个
第13次找到
总的桃子有40621个
第14次找到
总的桃子有43746个
第15次找到
总的桃子有46871个
第16次找到
总的桃子有49996个
第17次找到
总的桃子有53121个
第18次找到
总的桃子有56246个
第19次找到
总的桃子有59371个
第20次找到
总的桃子有62496个
第21次找到
总的桃子有65621个
第22次找到
总的桃子有68746个
第23次找到
总的桃子有71871个
第24次找到
总的桃子有74996个
第25次找到
总的桃子有78121个
第26次找到
总的桃子有81246个
第27次找到
总的桃子有84371个
第28次找到
总的桃子有87496个
第29次找到
总的桃子有90621个
第30次找到
总的桃子有93746个
第31次找到
总的桃子有96871个
第32次找到
总的桃子有99996个
第33次找到
总的桃子有103121个
第34次找到
总的桃子有106246个
第35次找到
总的桃子有109371个
第36次找到
总的桃子有112496个
第37次找到
总的桃子有115621个
第38次找到
总的桃子有118746个
第39次找到
总的桃子有121871个
第40次找到
总的桃子有124996个
第41次找到
总的桃子有128121个
第42次找到
总的桃子有131246个
第43次找到
总的桃子有134371个
第44次找到
总的桃子有137496个
第45次找到
总的桃子有140621个
第46次找到
总的桃子有143746个
第47次找到
总的桃子有146871个
第48次找到
总的桃子有149996个
Press any key to continue

对第一个值3121分解后:
解析3121个桃子。
第1个猴子醒来。看到3121个桃子,吃了一个剩3120个,分五分,每份624个,拿走自己的一份,还剩2496个。

第2个猴子醒来。看到2496个桃子,吃了一个剩2495个,分五分,每份499个,拿走自己的一份,还剩1996个。

第3个猴子醒来。看到1996个桃子,吃了一个剩1995个,分五分,每份399个,拿走自己的一份,还剩1596个。

第4个猴子醒来。看到1596个桃子,吃了一个剩1595个,分五分,每份319个,拿走自己的一份,还剩1276个。

第5个猴子醒来。看到1276个桃子,吃了一个剩1275个,分五分,每份255个,拿走自己的一份,还剩1020个。

看到结果是正确的。至少解答了帖子中的问题。至少要3121个桃子。


结论:对结果分析后发现:
要符合5个猴子这么分桃的总数是一个数列,初值是3121,等差是3125.那么
A(n)=3121+3125*n
哈哈。没想到这么复杂的分桃,居然是线性关系啊。
--

伟大的狄拉克先生。。。。五猴分桃,分的都是等差数列的值。。。带进等差的式子算,就搞定了,相信狄拉克他老人家早就已经想出答案了。。。

Last edited by VanHorn (2008-06-04 18:55:56)

Re: 五猴分桃问题,大家都来试试。看看大家的解法。

所以我不适合当程序员.........完全看不懂

寻找爱情就象在黑暗中寻找光明,总是朝着最亮的地方走.却往往不经意的错过了许多

Re: 五猴分桃问题,大家都来试试。看看大家的解法。

5(5(5(5(5x+1)+1)+1)+1)+1 = n 这里面有个最小,也就是最后每人至少是一个。如果没有,会打架的~~
所以,令x = 1, 求解吧~~,这么简单也用解,我倒~~

行者无涯,能者无疆。
FluxBB 中国

Re: 五猴分桃问题,大家都来试试。看看大家的解法。

我的思路和楼上一样啊。你是令x=1,而我令x=4仅此差别而已。