我们从正常的思维去思考
猴子吃桃问题
#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;
}