C语言经典算法100例-021-猴子吃桃问题
有前面几道题的基础,这道题还是比较简单的,我们来看问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
1.分析,我们先来看看这个问题的数学模型:
设n为第一天摘的桃子数。那么根据已知条件有:
s1=n/2-1;
s2=s1/2-1;
...
s10=s9/2-1=1;
那么很显然有:
s9=(s10+1)*2;
s8=(s9+1)*2;
...
s1=(s2+1)*2;
s0=(s1+1)*2=n;
那么利用10趟循环就可以解决问题。
2.我们来看源代码:
#include <stdio.h>
#include <stdlib.h>
//猴子吃桃问题
int main()
{
int n=1;
int day=10;
while(day>0)
{
n=2*(n+1); //昨天的桃子数等与今天桃子数加1的二倍
day--;
}
printf("Totally %d peaches!\n",n);
}
这里为了方便理解是从10到1循环,其实怎么循环都行,只要保证循环次数是10即可。