C语言 猴子吃桃

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第n天早上想再吃时,见只剩下一个桃子了。求第1天共摘了多少桃子?
以下代码: 求一个详细的解答与分析 一步一步 感激不尽 :

#include <stdio.h>
main()
{
int day,x1,x2;
day=9;
x2=1;
while(day>0)
{
x1=(x2+1)*2;
x2=x1;
day--;
}
printf("the total is %d\n",x1);
}

你好!!!
其实这是个递归问题!!!
思路分析如下:
某一天吃的是前一天的一半还多一个,假设今天剩下为x1,昨天共有x2个桃子,它们的关系是:x1=x2/2-1,即x2=(x1+1)*2,那么既然已经知道今天剩下的桃子,那么就可以知道,昨天的,要是知道昨天的,那么前天的就知道了,要是知道前天的,那么大前天的也就知道了、、、、、、到最后一定知道第一天的陶子总数。

现在我们来分析你的代码:

从代码可以知道,第九天只剩下一个桃子了,也就的循环九次,故代码为:
while(day>0)
{
x1=(x2+1)*2;
x2=x1;
day--;
}
不懂的我们在交流!!!
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-09-27
#include <stdio.h>
main()
{
int day,x1,x2;
day=9; //这里假设n=9,你总要给一个n的,不然没有办法计算
x2=1; //第九天早上还有1个桃
while(day>0)
{
x1=(x2+1)*2; //第8天吃了第7天剩下的一半多一个
//那第八天剩下的再加上1就是第8天原来的一半
//然后再乘以2既第八天原来的(也就是第7天剩的)
x2=x1; //让x2是第八天的桃的数量
//下一轮循环计算第七天原来有多少桃
day--;
}
printf("the total is %d\n",x1);
}本回答被网友采纳
第2个回答  2015-08-14
#include<stdio.h>
void main()
{int x=1,i;
for(i=1;i<=9;i++)
x=(x+1)*2;
printf("total is %d",x);
}
x是桃的总数。