猴子分桃

dengwei1116 2002-01-12 10:28:03
今天看到一道题,如下:

5只猴子分一堆桃.
第一只先吃了一个,然后恰好均分成5份,它拿走自己的一份;
第二只在剩余桃子里再先吃了一个,也恰好5等份,它也取走自己的一份;
其后,第三,第四只猴子也如先前两只一样取桃;
到第五只,它也先吃了一只,最后剩下的桃子也刚能5等份;
求:这堆桃的最小个数.

我认为这是一个求递归的初始条件的,然而具体算,发觉这个最小个数很大.
...全文
631 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bill1212 2002-01-25
  • 打赏
  • 举报
回复
3121没错!

int a=0;
int peach(int n)
{
if(n==0)
{
a+=5;
return a;
}
int m;
while(1)
{
m=peach(n-1);
if(n==1)
return m+1;
int t1=m%4;
if(t1!=0)
continue;
int t2=(m/4)*5+1;
return t2;

}
}

int main(int argc, char* argv[])
{
printf("%d\n", peach(5));
return 0;
}
sizhi 2002-01-25
  • 打赏
  • 举报
回复
看来大方点是有好处的,这一页面最珍贵的就是 CaoHua(曹华) 的思想了,我就怕那些猴子借桃子不还,所以始终不敢借出去。哎......
sizhi 2002-01-25
  • 打赏
  • 举报
回复
3121
3120 +1 -> 2495 + 1 ->1995 +1 -> 1595 + 1 -> 1275 + 1;
mis98ZB 2002-01-15
  • 打赏
  • 举报
回复
5^5-4
taolei 2002-01-15
  • 打赏
  • 举报
回复
-4是个很有意思的数,按照分桃子的过程:
吃了一个后是-5,刚好可以5等分,每一份-1,拿走一个-1之后,还剩下-4
这样,每个猴子分完都还剩-4。

问题的答案可以从-4开始,那么为正数的最小答案就是5^5-4=3121
  • 打赏
  • 举报
回复
我觉得应该是3121,我原来的答案,15621错了,我算成6只猴子了。
我不是用算法,我是用算术算的。
设x个桃子,因为第一只猴子吃了一个,正好可以分成5堆,所以,(x-1)mod5=0,那么,
(x+4)mod5=0,让我们做点好事,借给猴子们4个桃子,反正最后剩一大堆,我们可以连本带利收回。我们借给猴子4个桃子,那么正好可以分成5堆,第一个猴子就拿了其中一堆。但是,它并没有多得桃子,因为它原来就先吃了一只。就是(x+4)*(1/5)=(x-1)*(1/5)+1,
因为它没有多得,所以剩下的桃子比原来剩下的多4个(我们借给它们的4个桃子)。那么剩下的桃子同理也恰好可以分成5堆,第二只猴子又拿走了一堆,同理,第三,第四和第五。最后,剩下的桃子是(x+4)*(4/5)*(4/5)*(4/5)*(4/5)*(4/5),这应该是个整数,所以,(x+4)一定要能被5*5*5*5*5=3125整除,所以x+4最小是3125,此时,x为3121。
mathe 2002-01-13
  • 打赏
  • 举报
回复
这是数学题
kangxiang0923 2002-01-13
  • 打赏
  • 举报
回复
15621对吗?
我算的是15596
1: 15596-1=15595
15594*(4/5)=12476
2: 12476-1=12475
12475*(4/5)=9976
3: 9976-1=9975
9975*(4/5)=7976
4: 7976-1=7975
7975*(4/5)=6376
5: 6376-1=6375
6375*(4/5)可整除。

我是新手,所以程序算法肯定不好,有可能有错。见笑:

#include<iostream.h>

static n;
int i=6;
int get(int);
int shumu()
{
while(1)
{
n=1;
get(i);
if(n==7)
return i;
else;
i++;
}
}

int get(int i)
{
int j;
j=(i-1)/5;
j=j*4-1;
n++;
int k=j%5;
if(k==0)
if(n!=6)
get(j);
else;
return 0;
}

main()
{
int x;
x=shumu();
cout<<x;
return 1;
}

  • 打赏
  • 举报
回复
15621
bbb20bb 2002-01-13
  • 打赏
  • 举报
回复
你终于知道这个东东不好算
waterinpool 2002-01-13
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/Topic/222/222324.shtm
神鹰 2002-01-13
  • 打赏
  • 举报
回复
一:3906-1=3905/5=781
二:781-1=780/5=156
三:156-1=155/5=31
四:31-1=30/5=6
五:6-1=5/5=1
神鹰 2002-01-13
  • 打赏
  • 举报
回复
3906只桃子
duan_yanfeng 2002-01-13
  • 打赏
  • 举报
回复
你这样得到的结果一定是整数,所以直接初始成每猴一个,再算就行了
dengwei1116 2002-01-13
  • 打赏
  • 举报
回复
能不能用程序实现?
我是这样想的:
初始化最后每只猴子手上一个桃子;
逆向求第五次,第四次,第三次,第二次,第一次分前的桃子个数;
如果在到求出第一次个数(当然是自然数)之前任何一次得出的结果非整数,则
又从第五次开始,第五次猴子手上的桃子个数自加1.

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧