社区
新手乐园
帖子详情
猴子问题
gangzichh
2005-11-23 10:24:40
有一堆桃子 由5个猴子 第一个猴子把它分成5堆,还剩1个,他拿了一堆,然后把桃子混合,第二个猴子把剩下的,再分5堆,剩1个,他也拿了一堆,其他猴子依次类推,最后剩5堆,求原来的桃子数
...全文
388
29
打赏
收藏
猴子问题
有一堆桃子 由5个猴子 第一个猴子把它分成5堆,还剩1个,他拿了一堆,然后把桃子混合,第二个猴子把剩下的,再分5堆,剩1个,他也拿了一堆,其他猴子依次类推,最后剩5堆,求原来的桃子数
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
29 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gangzichh
2005-12-03
打赏
举报
回复
答案是有了,但是我有点晕呀,谁能讲一讲呢
czg516
2005-11-28
打赏
举报
回复
学习,
逆退思想
dlttyy
2005-11-27
打赏
举报
回复
//寒..终于改过来了...见笑啦各位...答案3126..试了可以..:)~
/*有5个猴子分一堆桃子, 第一个猴子把它分成5堆, 还剩1个, 他拿了一堆,
然后把剩下的桃子混合, 第二个猴子把剩下的再分5堆, 剩1个, 他也拿了一堆,
然后把剩下的桃子混合, 其他猴子依次类推,最后第5个猴子拿完后,
剩下的桃子刚好可以分为5堆, 求原来的桃子数 */
#include<iostream>
using namespace std;
int main()
{
int func(int,int);
int taozi;
for(int i=1;i<=10000;i++)
{
if(func(6,5*i)!=0)
{
taozi=func(6,5*i);
cout<<taozi<<endl;
break;
}
}
system("pause");
return 0;
}
int func(int a,int b)
{
int t;
if(a==1) return b;
else t=(func(a-1,b)-1)*5/4+1;
if(t%5==1) return t;
return 0;
}
dlttyy
2005-11-27
打赏
举报
回复
验证了一下.我程序好像答案还是错了~~
dlttyy
2005-11-27
打赏
举报
回复
//初学c++,写了一个下午了.呜呜.不知道还有没有错.或那里还可以改善,请指教咯..
/*有5个猴子分一堆桃子, 第一个猴子把它分成5堆, 还剩1个, 他拿了一堆,
然后把剩下的桃子混合, 第二个猴子把剩下的再分5堆, 剩1个, 他也拿了一堆,
然后把剩下的桃子混合, 其他猴子依次类推,最后第5个猴子拿完后,
剩下的桃子刚好可以分为5堆, 求原来的桃子数 */
#include<iostream>
using namespace std;
int main()
{
int func(int,int);
int taozi;
for(int i=1;i<=10000;i++)
{
if(func(5,5*i)!=0)
{
taozi=func(5,5*i);
cout<<taozi<<endl;
break;
}
}
system("pause");
return 0;
}
int func(int a,int b)
{
int t;
if(a==1) {t=b;return t;}
else t=func(a-1,b)*5/4+1;
if(t%5==1&&t!=1) return t;
return 0;
}
gangzichh
2005-11-25
打赏
举报
回复
这是我的错呀,我没有把题目说清楚的呀
问题1:有5个猴子分一堆桃子, 第一个猴子把它分成5堆, 还剩1个, 他拿了一堆, 然后把剩下的桃子混合, 第二个猴子把剩下的再分5堆, 剩1个, 他也拿了一堆, 然后把剩下的桃子混合, 其他猴子依次类推,最后第5个猴子拿完后, 剩下的桃子刚好可以分为5堆, 求原来的桃子数 )
代码是:
#include <iostream>
int main()
{
int i;
int nsum;
for(i=0; i<100000; i+=5)
{
int j;
nsum = i;
for(j=0; j<5; ++j)
{
nsum = (nsum * 5 - 1);
if(nsum % 4 != 0)
break;
nsum /= 4;
}
if(j==5)
std::cout<<nsum<<std::endl;
}
return 0;
}
要是那个让猴子吃了呢?
那代码就是这个:#include <iostream>
int main()
{
int i;
int nsum;
for(i=0; i<1000000; i+=5)
{
int j;
nsum = i;
for(j=0; j<5; ++j)
{
nsum = nsum * 5;
if(nsum % 4 != 0)
break;
nsum /= 4;
nsum += 1;
}
if(j==5)
std::cout<<nsum<<std::endl;
}
return 0;
}
fiftymetre
2005-11-24
打赏
举报
回复
此为老问题了, 经典c程序100例就有的。嘿嘿。
π萧筱雨 (18803603) 12:19:00
点点
责令你去解猴子问题去
π萧筱雨 (18803603) 12:19:07
http://community.csdn.net/Expert/topic/4414/4414049.xml?temp=.6419947
π萧筱雨 (18803603) 12:19:19
师傅我搞不定了
点雨点(32067090) 12:19:28
。。。。。。。。
多值得偶收藏的一些话哟哈哈。。。。。。。
fiftymetre
2005-11-24
打赏
举报
回复
main()
{int i,m,j,k,count;
for(i=4;i<10000;i+=4)
{ count=0;
m=i;
for(k=0;k<5;k++)
{
j=i/4*5+1;
i=j;
if(j%4==0)
count++;
else
break;
}
i=m;
if(count==4)
{printf("%d\n",count);
break;}
}
fiftymetre
2005-11-24
打赏
举报
回复
main()
{
int day,x1,x2;
day=9;
x2=1;
while(day>0)
{x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/
x2=x1;
day--;
}
printf("the total is %d\n",x1);
}
happydivid
2005-11-24
打赏
举报
回复
不对,应该是大于等于5的任意数
happydivid
2005-11-24
打赏
举报
回复
不可能知道有多少桃子,因为这个剩下五堆,五堆的桃子加起来可以为任意数
gangzichh
2005-11-24
打赏
举报
回复
好象是答案不对呀
gangzichh
2005-11-24
打赏
举报
回复
我要是C++的代码的,那个东西,有点多呀,我有点晕的呀
xiaocai0001
2005-11-24
打赏
举报
回复
最后剩余5个是无解的...
我上面的推导还漏了一点
由于每次分法都是整数, 则题意隐含如下两个条件
(A) Y mod 5 = 0
(B) f(0) 为整数
(B) f(0) 为整数
应该改为
(B) f(0), f(1), ..., f(n) 都为整数.
laoren_80
2005-11-24
打赏
举报
回复
应该是最后剩五个吧!!
xiaocai0001
2005-11-24
打赏
举报
回复
原题意理解:
有5个猴子分一堆桃子, 第一个猴子把它分成5堆, 还剩1个, 他拿了一堆, 然后把剩下的桃子混合, 第二个猴子把剩下的再分5堆, 剩1个, 他也拿了一堆, 然后把剩下的桃子混合, 其他猴子依次类推,最后第5个猴子拿完后, 剩下的桃子刚好可以分为5堆, 求原来的桃子数 )
以下根据我上面对题意的理解所给出的解答.
设f(n)表示第n个猴子拿过后剩下的桃总数.
由题意可知f(n) = 4 * (f(n-1) - 1) / 5 + 1
即 f(n)-1 = (f(n-1) - 1) * 4/5 .......(1)
(1)即为一个差分方程.
题意就是已知f(5) = Y, 求f(0) = ?
由(1)差分方程知
f(0) - 1 = (5/4)^n * (f(n) - 1)
将n=5, f(5) = Y 代入得
f(0) = (5/4)^5 * (Y-1) + 1
由于每次分法都是整数, 则题意隐含如下两个条件
(A) Y mod 5 = 0
(B) f(0) 为整数
f(0) = (5/4)^5 * (Y-1) + 1
= 3125 * (Y-1) / 1024 + 1
由f(0)为整数
而3125不能整除1024, 则必有(Y-1)整除1024
即 Y mod 1024 = 1
所以题意化为求如下的不定方程组
(1) Y mod 5 = 0
(2) Y mod 1024 = 1
Y = 5*m = 1024*n+1
即 1024*n - 5*m + 1 = 0
解该一次不定方程, 得:
特解m=205, n = 1
通解 m = 205 + 1024*t , n = 1 + 5*t (t=0, 1, 2, ... )
所以 Y = 5*m = 1025 + 5120*t (t=0, 1, 2, ...)
f(0) = 3126 + 15625*t (t=0, 1, 2, ...)
明显, f(0)有无穷多解, 但不是任意解
min{f(0)} = 3126
满足题意的最小值 f(0) = 3126
dragonzxh
2005-11-24
打赏
举报
回复
冒似钱能C++书上的课后习题...........
cdo
2005-11-24
打赏
举报
回复
5堆应该每堆的数量相同。
yefu2000
2005-11-24
打赏
举报
回复
估计原题是分成数目相同的5堆~
aishuishui021
2005-11-24
打赏
举报
回复
顶原题,估计是说错了吧这个用个递归就可以了!!!
加载更多回复(9)
猴子
吃桃
问题
c语言.
猴子
吃桃
问题
c语言
猴子
吃桃
问题
c语言
猴子
吃桃
问题
c语言
猴子
吃桃
问题
c语言
猴子
吃桃
问题
c语言
猴子
吃桃
问题
c语言
猴子
吃桃
问题
c语言
猴子
吃桃
问题
c语言
猴子
吃桃
问题
c语言
猴子
吃桃
问题
c语言
猴子
吃桃
问题
c语言
猴子
吃桃
问题
c语言
猴子
吃桃
问题
...
VB
猴子
摘桃
问题
VB
猴子
摘桃
问题
VB
猴子
摘桃
问题
VB
猴子
摘桃
问题
猴子
选大王
问题
链表实现
猴子
选大王
问题
,用链表解决,最后用c语言编程实现,本体是数据结果中的重要实验之一。很有用
利用数组实现
猴子
选大王
问题
C++
利用数组实现
猴子
选大王
问题
输入
猴子
的个数以及报的数得出大王的编号
labVIEW求
猴子
吃桃子
利用labVIEW进行编写的小程序
猴子
吃桃子的
问题
10天里
猴子
一共吃了多少个桃子呢
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章