这个采用逆推法:
假设第五只猴子拿了x个桃子,
则第四只猴子拿了y=(x*5+1)/4,
第三只猴子拿了z=(y*5+1)/4个猴子......
以此类推到第一只猴子。
他要求一开始最少有多少个桃子,我们可以知道最后一只猴子拿走的最少,则一开始的桃子也是最少,则我们设count变量为最后一直猴子拿走的桃子数量。设flag为标志,如果找到了最少的则退出循环。
我们设total为float类型,因为for循环中有/4,如果设置为int类型/4则自动取整,我们可以根据for循环后将total转换为int类型与不转换为int类型的total相减是否为零来判断是否求出最少的桃子数量。
int main()
{
float total,count=1;
int i,flag=1;
while(flag)
{
total=count;
for(i=0;i<4;i++)
{
total=(total*5+1)/4;
}
total=total*5+1;
if(total-(int)total==0)
{
flag=0;
printf("最少为%0.f个",total);
}
count=count+1;
}
return 0;
}
最后结果为:
![](https://img-blog.csdnimg.cn/img_convert/7ccdd68ed344d799e5c391507ae4f38d.png)