【C语言】猴子吃桃问题。

我们从正常的思维去思考 
猴子吃桃问题

#include <stdio.h>
int main ()
{
    int n = 1;
    int sum = 0;
    int i;
    for(i=0; i<9; i++)
    {
        n = 2*(n+1);
        sum += n;
        printf("%d\n",sum);
    }
    printf("\n%d\n",sum);
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

我们是希望逆序地输出了每天的桃子数,程序在逻辑上似乎没有什么问题,让我们看看运行结果图(1)。

图(1)

!!结果超出了预想的结果,而且所输出桃子数的总数也没有包括第10天的那一个桃子!让我们结合正确的运行结果图(2)来讲述其中的原因!

图(2)

首先第9天的桃子数正常输出(4个),接着从第8天开始图(1)的运行结果是将图(2)的运行结果进行两两相加所得到的。 
比如: 
图(1)的第8天的桃子数是将图(2)第9天的桃子数和第8天桃子数相加得到的(4+10=14),以此类推,你发现错在哪里了吗?

话不多说~~让我们进入正确的程序:

#include <stdio.h>
int main ()
{
    int n = 1;
    int i = 0;
    for(; i<9; i++)
    {
        n = 2*(n+1);
        printf("%d\n",n);
    }
    printf("\n%d\n",n);
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
 上面的程序,我们用for循环让变量i从0到9来逆序输出每天的桃子数;如果你更加希望让变量从9到0来逆序输出每天的桃子数,我们可以更换while循环,那么你可以采用以下方法:
  • 1
  • 2
#include <stdio.h>
int main ()
{
    int n = 1;
    int i = 9;
    while(i)
    {
        n = 2*(n+1);
        i--;
        printf("%d\n",n);
    }
    printf("\n%d\n",n);
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值