应用与设计

来源:百度知道 编辑:UC知道 时间:2024/04/29 08:49:30
5个猴子分桃子问题:
5个猴子看到一堆桃子,决定第二天分,
第一个到的猴子,扔掉一个后正好分成5份,拿走自己的一份,
第二个到的猴子,扔掉一个后正好分成5份,拿走自己的一份,
......
第五个到的猴子,扔掉一个后正好分成5份,拿走自己的一份,
问:这堆桃子至少有几个,用递归法求解 (请用C语言实现)

#include <stdio.h>

int fun(int n,int m)
{//n表示第n个猴子,m表示最后那个猴子拿走1份后,剩余的桃子数
if(n==1)
{//最后一个猴子
if(m%4==0 && m!=0)
{//能等分成4份
return m*5/4+1;
}
else
{
return 0;
}
}
else if(n>1)
{
int sum=fun(n-1,m);

if(sum%4==0 && sum!=0)
{//能等分成4份
return sum*5/4+1;
}
else
{
return 0;
}
}
else
{//容错处理
return 0;
}
}

void main()
{
int m=1,sum;

while((sum=fun(5,m))==0)
{
m++;
}
printf("这堆桃子至少有%d个!\n",sum);
}

程序运行结果为:这堆桃子至少有3121个!