猴子吃桃

猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将第一天剩下的桃子吃掉一半,又吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,发现只剩下一个桃子了。编写程序求猴子第一天共摘了多少个桃子。

 

思路:开始时是从前往后想,先设第一天摘的桃子为x,吃了x/2+1;然后第二天吃了[x-(x/2+1)]/2+1个,即(x-2)/4个...到第十天剩下1个,可是这样想的话算法太复杂了。后来换位思考了下,从后往前想,第九天剩1个,第一天的桃子数是第二天桃子数的加1后的2倍,即x1=(x2+1)*2。

#include <stdio.h>
main()
{
    int day,x1,x2;
    //day=9;
    scanf("%d",&day);
    x2=1;
    while(day>0)
    {
        x1=(x2+1)*2;
        x2=x1;
        day--; //从后往前推所以天数递减
    }
    printf("the total is %d\n",x1);
}

结果

E:\c++>a
9
the total is 1534

 

posted @ 2018-04-11 23:31  糖小俊  阅读(231)  评论(0编辑  收藏  举报