C语言 猴子吃桃
问题描述:
C语言 猴子吃桃
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第2天早上将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第n天早上想再吃时,见只剩下一个桃子了.求第1天共摘了多少桃子?
以下代码: 求一个详细的解答与分析 一步一步 感激不尽 :
#include
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--;
}
不懂的我们在交流!