给大家一个提神的问题!

GERY2003 2004-04-13 09:33:52
5只猴子在山顶发现了一堆桃子,约定第二天来分桃子,次日:
猴1来到,发现不能够平分,于是扔掉了一个,等分后,拿了一份离开;
猴2来到,发现不能够平分,于是扔掉了一个,等分后,拿了一份离开;
猴3~5来到,发现不能够平分,于是扔掉了一个,等分后,拿了一份离开;
问:桃子最少为多少 个??
写出算法!
...全文
46 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2004-04-21
  • 打赏
  • 举报
回复
((3126-1)*4/5-1)*4/5=1999.2;
(((((3121-1)*4/5-1)*4/5-1)*4/5-1)*4/5)/5=255;
GERY2003 2004-04-20
  • 打赏
  • 举报
回复
这么有意思的题都没有人回答
我还是自己顶吧
GERY2003 2004-04-20
  • 打赏
  • 举报
回复
TO:雷鸟
你的答案是对的
不过这到题我没有给分
因为这是一个小问题
对于你们这样的高人来说是小菜一碟
不知道还有没有高人回答啊
菜牛 2004-04-20
  • 打赏
  • 举报
回复
int nLast = 1; //最后1个猴子分到的桃子
int Result = 0; //结果
double dResult = 0.0; //比较用的
int nMonkey = 5; //猴子数
int i; //猴子计数循环
while (1)
{
Result = nLast * 5 + 1; //最后1个猴子看到的桃子
dResult = Result;
for (i = 1; i < nMonkey; i++) //倒数第2个猴子至第1个猴子看到的桃子
{
dResult = 1.0 + dResult * 1.25;
Result = 1 + Result * 5 / 4; //前1个猴子剩下的桃子
if (dResult != (double)Result) //不是整数就算了
break;
}
if (i == nMonkey) //到第1个还是整数,成功
break;
nLast++; //分不好,最后1个猴子只好再多拿一个。
}
CString strResult;
strResult.Format("桃子总数是%d个,最后一只猴子拿走%d个桃子。", Result, nLast);
AfxMessageBox(strResult);
菜牛 2004-04-20
  • 打赏
  • 举报
回复
3121
th_xu 2004-04-19
  • 打赏
  • 举报
回复
怎么没分啊?
th_xu 2004-04-19
  • 打赏
  • 举报
回复
#include<iostream.h>
void main(void)
{
int count = 6;
double n;
while(1)
{
n = (double)count;
for(int i = 0; i < 5; i++)
{
n = n - (n - 1) / 5.0;
if( n - (int)n != 0)
{
break;
}

}
if( i == 5 )
{
break;
}

count = count + 1;


}
cout << count;
}

答案:3126
不知道对不对。
菜牛 2004-04-19
  • 打赏
  • 举报
回复
这个题麽,何不反过来看。
第5个猴子,扔掉1个,平分成5份,最少每份1个,因此:
第4个猴子剩下的是6个,而这6个呢,是他剩下的4份,因此:
第3个猴子剩下的是:1+6*5/4=8.5;
第2个猴子剩下的是:1+8.5*5/4=11.625;
第1个猴子剩下的是:1+11.625*5/4=15.53125;
那么第1个猴子看到的是:1+15.53125*5/4=20.4140625;
结果就出来了。
大家看到,设初始桃子为x,则第2个猴子看到的是(x - 1) * 4 / 5;
第3个猴子看到的是((x - 1) * 4 / 5) - 1) * 4 / 5;这是一个循环或者迭代的问题。




忘了,桃子不能是小数个的,怎么办?答案应该是2613吧,既然没有分,供大家考虑吧。
GERY2003 2004-04-19
  • 打赏
  • 举报
回复
谢谢黑子啊,其实我也是新手
只不过朋友给出了个小题
拿出来给大家提提神
看这段时间大家都比较郁闷
没人回答问题了
sun_star221 2004-04-14
  • 打赏
  • 举报
回复
我就说嘛,向我这样的新手怎么能一下子就做出来呢

果然是我理解错了,呵呵呵

一会重新做做看
GERY2003 2004-04-13
  • 打赏
  • 举报
回复
都没人愿意回答啊
算了
我自己顶!
GERY2003 2004-04-13
  • 打赏
  • 举报
回复
TO:sun_star221(黑子)
你的结果不对

你可能理解错意思了
你再看看原题

猴1来到,发现不能够平分,于是扔掉了一个,等分后,拿了一份离开
等分指分成5份
每个猴子都是分成5份


sun_star221 2004-04-13
  • 打赏
  • 举报
回复
用递归的算法
sun_star221 2004-04-13
  • 打赏
  • 举报
回复
不懂的问:这样可以么?
答案是3906,好像太多了

#include<iostream.h>
int fuc(int n);
void main(void)
{
cout << fuc(5);
}
int fuc(int n)
{
if (n > 0)
return (fuc(n - 1) * 5 + 1);
else
return 1;
}

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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