C语言编程题,关于猴子分桃问题

题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
有点分不清关系那种感觉,请高手指教一二,应该如何编写这一程序呢?谢谢了!

正确的答案是3121。
手工验算一下吧,又不难的!

#include <stdio.h>

//判断能否被合理的分配
int divide(int n,int m)
{
if(n/5==0 || n%5!=1)
{//不足5个或不能分5份多1个,分配失败
return 0;
}
if(m==1)
{//分到最后一个猴子,说明能分配成功
return 1;
}
return divide(n-n/5-1,m-1);
}

main()
{
int n;//桃子数量

for(n=1;;n++)
{
if(divide(n,5))
{//判断能否被合理的分配
printf("%d\n",n);
break;
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-06-30
#include <stdio.h>

int MinNum()
{
int i,j,num;
for(i=6;;i+=5)/*对所有能分成5份还余1的整数进行探试*/
{
num=i;
for(j=0;j<5;j++)/*5个猴子重复同一样的分桃过程*/
{
if(num/5==0||num%5!=1) break;/*如果剩余的桃子分不成5份或者分成5份后不会正好多余1个桃子,则说明分桃过程进行不下去了,结束分桃*/
num=num-num/5-1;/*如果分桃过程能进行下去,拿走一份,扔掉1个,下一个猴子继续分桃*/
}
if(j>=5) return i;/*如果上面的循环顺利结束,说明分桃顺利结束,找到了符合条件的最小桃子数,返回*/
}
}

main()
{
printf("最少桃子数为:%d\n",MinNum());
}

/*还有一种逆向求解的方法,探试的次数要少一点*/
#include <stdio.h>

int MinNum()
{
int i,j,num;
for(i=6;;i+=5)
{
num=i;
for(j=4;j>0;j--)
{
if(num%4) break;
num=num+num/4+1;
}
if(j<=0) return num;
}
}

main()
{
printf("最少桃子数为:%d\n",MinNum());
}
第2个回答  2008-07-01
这个太简单了;
把握一个想法: 总共分了N次分完的;
用个for循环:
for(int i=1;i<=N;i++)
然后就是每次都分上一次减1的1/5;
设最后一次是j;
则依次可以计算最开始的表达式;
即得。
第3个回答  2008-07-02
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",j);
break;}
}
}
第4个回答  2008-07-01
#include<iostream>
using namespace std;
int main()
{int x=1,temp;
abc:{temp=x;
for(int i=5;i>0;i--)
{if(temp*5%4!=0){x++;goto abc;}
temp=temp*5/4+1;
}}
cout<<temp<<endl;
return 1;
}

亲猴子分桃问题的c语言编程拜求!详加注释!谢谢!
t-1); \/*采用递归调用的方法,如果第一只猴子可以分到桃,则参数变为剩下的桃子和剩下的猴子,按照同样的方法进行分桃*\/}\/*用来判断总共total个桃子,t只猴子,

用C语言编一程序 猴子分桃的问题
1,第5只猴子有桃子吃;2,第5只猴子在醒后吃桃子之前把桃子平均分成了5份,而且还多了一个桃子(隐含意义是第5只猴子吃了2个桃子,剩下4个桃子,这样才满足摘的数量最少);那么我们就知道了,最后一个猴子(将猴子数量扩展为未知,猴子数为n)醒后还有n+1个桃子;第n-1个猴子醒后还有n*(n...

猴子分桃
\/\/公式n^5+1-n include<stdio.h> using namespace std;int main(){ long long n,num,sum,a[21],i;a[1]=1;for(i=2;i<=20;i++){ a[i]=a[i-1]*5+16;} while(scanf("%I64d",&n)&&n){ num=a[n];sum=0;printf("%I64d ",num);while(n--){ num--;sum++;num=num...

猴子摘桃问题?我写的c语言程序哪里出错了。
printf("第一只猴子拿到和吃掉的桃数:");printf("%d\\n",a[k]=(a[k]-1)\/5+1);printf("第二只猴子拿到和吃掉的桃数:");printf("%d\\n",a[k]=(4*a[k]-1)\/5+1);printf("第三只猴子拿到和吃掉的桃数:");printf("%d\\n",a[k]=(4*a[k]-1)\/5+1);printf("第四只猴子拿...

相似回答