【C语言编程练习】5.11 猴子吃桃子问题

1. 问题描述

有一只猴子,第一天摘下若干个桃子,当即吃掉了一半,又多吃了一个,第二天又将剩下的桃子吃掉了一半,又多吃了一个,按照这样的吃法,每天都吃前一天吃下的桃子的一半又一个。到第十天,就剩下了一个桃子。问题:第一天摘下了多少个桃子

2. 题目分析

如果按照正常的思路而言,设第一天摘下了X个桃子

第一天剩下 --- X/2-1个桃子

第二天剩下 ---( X/2-1)/2-1个桃子

 

【问题】如何确保桃子的一半一定是一个偶数呢?

发现应该从最后一天开始想

 

以此类推,到第10天

那么编程是否可以从第10天开始,往前递推,

第10天 1

第9天 (1+1)*2

第8天 (((1+1)*2)+1)*2

 

 

先进行代码尝试吧

【注意】i++还是++i

3. 代码尝试

【版本1】

#include "stdio.h"

 

int main(){

    int num=1;

    int i=1;

    while(i<=10){

        num = (num+1)*2;

        //++i;

        i++;

    }

    printf("the number of peach is %d",num);

}

 

不论是i++还是++i,结果都没有改变

 

但正确的结果应该是1534呢!哪里有错呢?? 错误原因是for循环的条件,这个确实是一个易错点,先看看正确的代码。

【最终版本】

#include "stdio.h"

 

int main(){

    int num=1,i;

    for(i=9;i>0;i--){

        num = (num+1)*2;

    }

    printf("the number of peach is %d",num);

}

 

以及下面的版本也是正确的

#include "stdio.h"

 

int main(){

    int num=1;

    int i=1;

    while(i<=9){

        num = (num+1)*2;

        //++i;

        i++;

    }

    printf("the number of peach is %d",num);

}

 

那么如何确定循环的次数呢?一定要小心!

这里的第10天对应的就是1了,那么后面的循环应该是针对于第9天了啦!

 

4. 总结

一定要小心循环条件呢!不可以似是而非呢!

 

猜你喜欢

转载自www.cnblogs.com/mumutoday/p/10548998.html