C 语言 | 猴子吃桃问题 循环结构程序设计-第12题 作者: Chuwen 时间: 2019-04-19 分类: C/C++ #题目 > 猴子吃桃问题。猴子第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 代码 ```c #include 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][1] [1]: https://cdn.nowtime.cc/2019/04/19/2394092364.png 标签: C