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即可。

 

posted @ 2014-03-03 20:25  庄浩  阅读(795)  评论(0编辑  收藏  举报