当前位置: 代码迷 >> C语言 >> [求助]猴子分桃的问题!
  详细解决方案

[求助]猴子分桃的问题!

热度:459   发布时间:2005-01-09 00:21:00.0
[求助]猴子分桃的问题!
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个这   只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了
一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,  问海滩上原来最少有多少个桃子?
搜索更多相关的解决方案: 猴子  

----------------解决方案--------------------------------------------------------
????不存在吧!5个候子都分成5份怎么可能每次都多一个!那不是扔掉了5个桃子了吗!!这样的话第一支猴子应该可以平均分配阿!应该不会多的了!
----------------解决方案--------------------------------------------------------

答案是这个,看我看不懂它的意思!

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;} } }


----------------解决方案--------------------------------------------------------
我自己编的,我是初学,见笑。
#include "stdafx.h"
#include &lt;iostream.h&gt;
bool b=true;
int fen(int f)
{
if(((f%5)==1)&amp;&amp;((f/5)!=0))
  b=true;
else b=false;
int ff=f/5;
int fff=ff*4;
return fff;
}
int main(int argc, char* argv[])
{
int i;
    for(i=1;;i++)
{
  int ii=i;
  for(int s=0;s&lt;5;s++)
  {
   fen(ii);
   if(b==true)
   {
    ii=fen(ii);
   }
   else break;
  }
  if(b==true) break;
}
cout&lt;&lt;"this number is"&lt;&lt;i&lt;&lt;endl;
return 0;
}

答案是3121。
----------------解决方案--------------------------------------------------------
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
main(){
int i,m,j,k,count;
for(i=4;i&lt;10000;i+=4){//保证利用公式a(n+1)=a(n)*1.25+1所得数为整数
count=0;
m=i;
for(k=1;k&lt;=5;k++){
  j=5*m/4+1;
  m=j;//用来累计计算
  if(m%4==0){//保证这个数利用公式b(n+1)=b(n)*0.8-1所得到的b(n+1)为整数
   count++;//记录满足上述公式的次数,题目要求5次,即能够被5只猴子这样分
  }
  else{
   break;//如果没达到5,说明此数不满足,进入下一轮循环
  }
}
if(count==5){
  printf("%d\n",j);//应该是把最小的桃子数给打印出来
  break;
}
}//for
return 0;
}

结果是12496
注:我进行了一些修改,你看一下!
----------------解决方案--------------------------------------------------------
你的结果是错误的,我的结果是正确的。

因为这个判断if(m%4==0)只需要执行4次,而不是5次。

因为要求第五个猴子未拿前的桃子数必须被四整除,第四个也是,到第二个也是,第一个分前即最初的值可以不被4整除。

所以,这一段:

if(count==5){
  printf("%d\n",j);//应该是把最小的桃子数给打印出来
  break;
}

应改为count&gt;=4。
----------------解决方案--------------------------------------------------------
对不起,这个判断if(m%4==0)是要执行5次的。

只是count==5应改为count&gt;=4。
----------------解决方案--------------------------------------------------------
按照你的方法,我的程序,结果还是3121

#include "stdafx.h"
#include &lt;iostream.h&gt;
bool b=true;
int value;
int fen(int f)
{
int ff=f*5+1;
if((ff%4)==0)
  b=true;
else b=false;
int fff=ff/4;
value=ff;
return fff;
}
int main(int argc, char* argv[])
{
int i;//i is the initial value which be devided by 5 at the fifith time.
    for(i=1;;i++)
{
  int ii=i;
  int s;
  for(s=0;s&lt;5;s++)
  {
   ii=fen(ii);
   if(b!=true)
    break;
  }
  if(s==4) break;//it is OK that the program can be executed to s=4.
}
cout&lt;&lt;"this number is"&lt;&lt;value&lt;&lt;endl;
return 0;
}
----------------解决方案--------------------------------------------------------
恩,你说的对!
我好像做成了6只猴子的结果了!
正如你所说的正确答案是3121
谢谢!:)
----------------解决方案--------------------------------------------------------
  相关解决方案