社区
新手乐园
帖子详情
猴子问题
gangzichh
2005-11-23 10:24:40
有一堆桃子 由5个猴子 第一个猴子把它分成5堆,还剩1个,他拿了一堆,然后把桃子混合,第二个猴子把剩下的,再分5堆,剩1个,他也拿了一堆,其他猴子依次类推,最后剩5堆,求原来的桃子数
...全文
505
29
打赏
收藏
猴子问题
有一堆桃子 由5个猴子 第一个猴子把它分成5堆,还剩1个,他拿了一堆,然后把桃子混合,第二个猴子把剩下的,再分5堆,剩1个,他也拿了一堆,其他猴子依次类推,最后剩5堆,求原来的桃子数
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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++语言编写,在控制台内简单显示整个过程
猴子
问题
----约瑟夫环算法
一群
猴子
要选新猴王。新猴王的选择方法是:让N只候选
猴子
围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的
猴子
即退出圈子,接着又从紧邻的下一只
猴子
开始同样的报数。如此不断循环,最后剩下的一只
猴子
就选为猴王。请问是原来第几号
猴子
当选猴王? 这是PAT基础编程上的一道题 初始想法 利用一个循环链表,遍历到待删除的节点则把他删除出去 直到只剩一个节点为止 这个算法不管是写...
猴子
吃桃
问题
--C语言
猴子
吃桃
问题
经典的
猴子
问题
有5只
猴子
菜了一堆桃子,
猴子
们很累于是就先各自回家睡觉然后来分桃子。第一只
猴子
醒来把一堆桃子平均分成5堆,发现多了一个,于是把多出的一个吃掉,自己拿走了一堆。第二只
猴子
醒来,认为自己是第一个醒来的
猴子
,于是又把桃子平均分成5堆,发现多了一个,于是把多出的一个桃子吃掉,自己拿走一堆。第三只
猴子
同样也认为自己是第一个醒来的
猴子
,于是又把桃子平均分成5堆,发现多了一个,于是把多出的一个桃子吃掉,自己拿走一堆。第四、第五只也是如此。问:至少有多少桃子?
约瑟夫环(
猴子
选大王
问题
)
数据结构与算法之约瑟夫环。 与其枯燥的讲解约瑟夫环,倒不如用约瑟夫环来解决一个有趣的
问题
。
猴子
选大王
问题
: 现在有N个
猴子
需要选取一个猴王,这N个
猴子
手拉手围成一个圈,旁边有一位德高望重的老猴,先将这一圈猴按顺时针方向编号1,2.......N,然后给每只小猴一张纸条,上面记录着一个数字m(非负数),并且由老猴王随机报出一个数num,该数为初始数字,由编号为1号的猴开始...
新手乐园
33,321
社区成员
41,774
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章