[求助]猴子分桃的问题!
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个这 只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?
搜索更多相关的解决方案:
猴子
----------------解决方案--------------------------------------------------------
????不存在吧!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 <iostream.h>
bool b=true;
int fen(int f)
{
if(((f%5)==1)&&((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<5;s++)
{
fen(ii);
if(b==true)
{
ii=fen(ii);
}
else break;
}
if(b==true) break;
}
cout<<"this number is"<<i<<endl;
return 0;
}
答案是3121。
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <math.h>
main(){
int i,m,j,k,count;
for(i=4;i<10000;i+=4){//保证利用公式a(n+1)=a(n)*1.25+1所得数为整数
count=0;
m=i;
for(k=1;k<=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>=4。
----------------解决方案--------------------------------------------------------
对不起,这个判断if(m%4==0)是要执行5次的。
只是count==5应改为count>=4。
----------------解决方案--------------------------------------------------------
按照你的方法,我的程序,结果还是3121
#include "stdafx.h"
#include <iostream.h>
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<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<<"this number is"<<value<<endl;
return 0;
}
----------------解决方案--------------------------------------------------------
恩,你说的对!
我好像做成了6只猴子的结果了!
正如你所说的正确答案是3121
谢谢!:)
----------------解决方案--------------------------------------------------------