5只猴子分一堆桃子,怎么也不能分成5等份,只好先去睡觉,准备第二天再分。夜里1只猴子偷偷爬起来,先吃掉1个桃子,然后将其分成5等份,藏起自己的一份就去睡觉了;第2只猴子又爬起来,吃掉1个桃子后,也将桃子分成5等分,藏起自己的一份睡觉去了;以后的3只猴子都先后照此办理。问最初至少有多少个桃子?
倒过来想问题:
要假设第五只猴子时,平均每个猴子得到n个桃子
第五只猴子吃掉一个桃子后剩5n个
第四只猴子吃掉一个桃子后剩5(5n+1)/4=25n/4+5/4
第三只猴子吃掉一个桃子后剩5(25n/4+5/4+1)/4=125n/16+45/16
第二只猴子吃掉一个桃子后剩5(125n/16+45/16+1)/4=625n/64+305/64
第一只猴子吃掉一个桃子后剩5(625n/64+305/64+1)/4=3125n/256+1845/256
原来共有桃子3125n/256+1845/256+1=3125n/256+2101/256=(12n+8)+53(n+1)/256
这里是突破口:53(n+1)/256 是整数
桃子数是整数 所以n=255 桃子总数3121个。
C++代码实现,使用递归算法:
int count = 0;
int func(int num)
{
int temp = num-1;
if(temp%5 == 0 && count<5)
{
count++;
return func(temp/5*4);
}
else
return num;
}
int main(void)
{
int i;
for(i = 1;i<40000;i++)
{
if((i-1)%5==0) //代码优化
{
count = 0;
if( func(i)!=-1 && count==5)
{
cout<<"总共有: "<<i<<"个桃子"<<endl;
break;
}
}
}
system("pause");
return 0;
}
分享到:
相关推荐
这是为学习Java基础的资料视频,猴子分桃问题
Java源码猴子分桃问题.rar
猴子分桃问题.html
有5只猴子共有一堆桃,约好一起分享。第一只猴子来到后把桃平均分成5堆后还剩下一个,就吃了这一个并搬走了5堆中的一堆。第二猴子来到后不知道前一只猴子已经拿走了,它把4堆桃合在一起又平均分成5堆后,也剩下一个...
猴子吃桃问题c语言猴子吃桃问题c语言猴子吃桃问题c语言猴子吃桃问题c语言猴子吃桃问题c语言猴子吃桃问题c语言猴子吃桃问题c语言猴子吃桃问题c语言猴子吃桃问题c语言猴子吃桃问题c语言猴子吃桃问题c语言猴子吃桃问题...
主要介绍了C语言实现的猴子分桃问题算法,较为详细的分析了猴子分桃问题算法的原理与通过递归算法解决问题的相关实现技巧,需要的朋友可以参考下
关于猴子吃桃问题的数据结构课程设计报告关于猴子吃桃问题的数据结构课程设计报告关于猴子吃桃问题的数据结构课程设计报告关于猴子吃桃问题的数据结构课程设计报告
甲、乙、丙3个猴子带着21个篮子去摘桃子。回来以后,发现有7个篮子装满了桃子,还有7个篮子装了半篮桃子,另外7个篮子是空的。假设7个满篮中桃子的重量都相同为a千克,7个半篮中桃子的重量也相同为b千克。在不将桃子...
ACM上面的题目。算法很巧妙,在OJ上AC了,有兴趣的可以下载看看
数据结构课程设计报告--猴子偷桃问题.zip数据结构课程设计报告--猴子偷桃问题.zip
VB 猴子摘桃问题 VB 猴子摘桃问题 VB 猴子摘桃问题
利用labVIEW进行编写的小程序 猴子吃桃子的问题 10天里猴子一共吃了多少个桃子呢
有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。采用链式数据结构实现上述求解。
猴子吃桃问题。猴子第一天摘下若干桃子,当即吃了一半,不过瘾又多吃了一个。第二天又将剩下的桃子吃了一半,又多吃了一个。以后每天都吃了前1天剩下的一半,再多一个。到第十天早上想吃时,见只剩下一个桃子了。
基于java实现的解决猴子吃桃问题源码.rar基于java实现的解决猴子吃桃问题源码.rar基于java实现的解决猴子吃桃问题源码.rar基于java实现的解决猴子吃桃问题源码.rar基于java实现的解决猴子吃桃问题源码.rar基于java...
猴子吃桃问题 1) 采用数组数据结构实现上述求解; 2) 采用链表数据结构实现上述求解; 3) 采用递归的方式求解。
简单的猴子摘桃问题,循环算法.如果您需要,就请点击下载吧。
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾, //又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 //以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时, //...
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上想再吃时,就只剩一个...