我来告诉你,我也在这道题上面脑子转不过来.
首先,你得知道这是一个循环的题目,会想到white或者for,然后从整体的高度去看这道题,初始的西瓜数量是1020个,每天都在减少,直到为零或者负数为止,那 瓜数<0 循环就要结束,而 瓜数>0 那就要一直循环.
可以用while 理解起来容易些,while的结构: while(){ }对吧, ()内是判断,定义一个变量i赋初值为1020,刚才也分析了只要i大于零就一直循环,所以while(i>0).你是用瓜的数量和0做对比,所以得知道每天剩余的瓜有多少,题目中,每天卖掉一半多两个,这里千万不要认为每天剩余的瓜数是i/2+2,举一个最最简单的例子就好,假设现在有8个瓜,第一天卖掉一半多两个,就是卖掉了4+2个对吧,那剩下的就是2个,也就是4-2个,也就是i/2-2个对吧,所以你每天都要用剩余的瓜数去代替原来瓜的总数对吧,才能去判断是否要继续循环,换做C语言中的思想就是 i=i/2-2 重新赋值.即while(i>0){
i=i/2-2;
}
这样还不够,因为题目问的是几天卖完,还需定义一个变量做天数,int tian =0,注意 天数最好赋初值,不然自增的时候没有初值系统会随机分配垃圾数,不信的话可以试一下.天数是怎么增加的呢,只要一天没卖完,就需要多一天,这种理解可以吧,所以 每当i>0, 天数就要自增一次对吧,所以
while(i>0){
tian++;
i=i/2-2;
} 这里我把tian++放在i=i/2-2之前是为了帮助你理解,结果是一样的
到这 整道题就可以完整的写出来了,即:
#include <stdio.h>
int main(){
int i=1020,tian=0;
while(i>0){
i=i/2-2;
tian++;
}
printf("%d\n",tian);
return 0;
}
还是不理解的话私信我,还有for循环也能实现,想知道的话我再告诉你,打字有点多,希望能帮助你理解.都是来求学的,大家都不容易,一起努力! |