C 语言 | 猴子吃桃问题 循环结构程序设计-第12题

题目

猴子吃桃问题。猴子第1天摘下若干个桃子,当即除了一般,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉了一半,有多吃了一个。
以后每天早上都吃了前一天剩下的 一半零一个。到第10天早上想再吃时,就只剩一个桃子了。
求第1天共摘了多少个桃子?

解题思路

1.假设 桃子 总共有 x 个,则可以列出式子:

y1:第1天剩下的桃子数量
y2:第2天剩下的桃子数量
...
y9:第9天剩下的桃子数量
y1 = x/2 - 1
y2 = y1/2 - 1
y3 = y2/2 - 1
y4 = y3/2 - 1
y5 = y4/2 - 1
y6 = y5/2 - 1
y7 = y6/2 - 1
y8 = y7/2 - 1
y9 = y8/2 - 1

2.根据题目得知,第9天还剩一个桃子,故我们可解方程得出:

因为 y9 = 1
所以将 y9=1 带入 y9 = y8/2 - 1,解得方程
y8 = 1+1*2
y8 = 4
然后继续往上解,即可得到第1天摘了多少个桃子

C 代码

#include <stdio.h>

int main() {
    int days=1, peach=1, eat;
    
    do{
        peach = (peach+1)*2;
        days++;
    }while(days<10);
    printf("猴子第 1 天摘了:%d 个桃子", peach);
    
    printf("\n-------------------------------\n");
    printf("验证结果:\n");
    
    days = 1;
    do{
        eat = peach/2+1;//吃了多少个桃子
        peach -= eat;//桃子的剩余数量
        printf("第%2d 天:吃了 %3d 个,剩余 %3d 个桃子\n",days,eat,peach);
        days++;
    }while(days<=10);
    
}

运行结果

猴子第 1 天摘了:1534 个桃子
-------------------------------
验证结果:
第 1 天:吃了 768 个,剩余 766 个桃子
第 2 天:吃了 384 个,剩余 382 个桃子
第 3 天:吃了 192 个,剩余 190 个桃子
第 4 天:吃了  96 个,剩余  94 个桃子
第 5 天:吃了  48 个,剩余  46 个桃子
第 6 天:吃了  24 个,剩余  22 个桃子
第 7 天:吃了  12 个,剩余  10 个桃子
第 8 天:吃了   6 个,剩余   4 个桃子
第 9 天:吃了   3 个,剩余   1 个桃子
第10 天:吃了   1 个,剩余   0 个桃子

Snipaste_2019-04-19_13-56-06.png


如无特别声明,该文章均为 现在网NowTime.cc)原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0) 协议,即转载请注明文章来源。


标签: C

赞 (0)

添加新评论