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