黑马程序员技术交流社区

标题: 跪求大神指点这个代码怎么编写?出结果,谢谢 [打印本页]

作者: Sunshine丶星空    时间: 2016-2-25 22:48
标题: 跪求大神指点这个代码怎么编写?出结果,谢谢
一个老农去卖西瓜,他有1020个瓜,第一天卖掉一半多俩个,第二天卖掉剩下的一半多俩个,问几天买完?
小弟一点头绪都没有不知道如何编写这段代码,跪求指点!

作者: zhangmingcheng    时间: 2016-2-26 07:33
    我来告诉你,我也在这道题上面脑子转不过来.
    首先,你得知道这是一个循环的题目,会想到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循环也能实现,想知道的话我再告诉你,打字有点多,希望能帮助你理解.都是来求学的,大家都不容易,一起努力!
作者: Sunshine丶星空    时间: 2016-2-26 11:52
zhangmingcheng 发表于 2016-2-26 07:33
我来告诉你,我也在这道题上面脑子转不过来.
    首先,你得知道这是一个循环的题目,会想到white或者for, ...

非常感谢~
作者: 米阳    时间: 2016-3-1 17:11
本帖最后由 米阳 于 2016-3-2 10:30 编辑

同样受教了 , 多谢  
作者: dx206    时间: 2016-3-1 17:19
看回复的太仔细了,学习了
作者: 飘忽不定~    时间: 2016-3-1 19:40
这个用for循环啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2