| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1103 人关注过本帖
标题:关于喝矿泉水的问题,我的思路应该没有错的啊,大家帮我看看
只看楼主 加入收藏
fa123d1
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-5-29
收藏
 问题点数:0 回复次数:8 
关于喝矿泉水的问题,我的思路应该没有错的啊,大家帮我看看
/*
需求:矿泉水一元钱一瓶,每2个空瓶换一瓶矿泉水,现在又20元,请问可以喝多少瓶矿泉水?
*/

class Water
{
    int sum=0;
    boolean flag = true;
    void water(int p)
    {
        int n = p;
        while(flag)        //一共能喝矿泉水瓶数
        {
            
            if (n<=0)
            {
                sum+=1;
                flag = false;
            }
            sum += n;
            n = p/2;
            
        }
        System.out.println(sum);
    }
   
}

class WaterDemo3
{
    public static void main(String[] args)
    {
        Water w = new Water();
        w.water(20);
    }
}
为什么运算时会变成死循环了?没有打印,一直停在那里。
如果不封装对象的话在main里是可以正常运行的
如果用for循环的话就无法把实参传到形参哪里,打印出结果是0.
搜索更多相关主题的帖子: 矿泉水瓶 false 
2012-11-10 22:27
陈润华
Rank: 1
来 自:湖南永州
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-11-9
收藏
得分:0 
     好像没错啊

宅男控
2012-11-10 23:08
shellingford
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:19
帖 子:228
专家分:1348
注 册:2010-8-9
收藏
得分:0 
2个错误
第一,代码没有考虑单数问题。例如5个空瓶子,可以换2个矿泉水和余留1个空瓶。而代码中直接整除没有考虑上次/上上次遗留下来的1个空瓶子

第二,n = p/2; 而p永远不会再变了,所以n经过2次循环后也不会再改变,这是死循环的原因。
2012-11-10 23:28
水枪首
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-9-22
收藏
得分:0 
楼上正解
2012-11-13 09:44
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:0 
看看

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-11-13 10:31
gamesover
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2012-6-26
收藏
得分:0 
money = 1, bottle = 1
money = 2, bottle =2 => money = money + 1
money = 3, bottle =3 => money = money + 1, bottle = 1

因为1块钱可以买一瓶水,空瓶可以换0.5元,其实每瓶水相当于0.5元就可以买
考虑到只有1块钱特殊情况,空瓶换的0.5元什么也看不了
drink = (int(money - 1)) * 2 + 1
2012-11-14 21:49
singlanelau
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-9-10
收藏
得分:0 
首先你的n=p/2,而p是不变的,你的n也就永远不变所以就进入死循环了。再者,这里lz必须考虑到余数的问题。
如果按lz的思路,可以把程序改动下:
class Water{
    int n,m,sum;
    void water(int p){
    n=p;
    sum=p;
        while(n>1){
        sum+=n/2;
        m=n%2;
        n=n/2;
        if(m!=0){
            n=n+m;
        }
        
    }
    System.out.println(sum);
    }
}
2012-11-14 23:01
兜兜里有耗子
Rank: 2
等 级:论坛游民
帖 子:16
专家分:18
注 册:2012-10-8
收藏
得分:0 
public class Water {
    public static void main(String[] args) {

        int i, sum = 20;
   
            for(i=10;i>=1;i=i/2){
                sum=sum+i;
            }
            
        System.out.println(sum);
    }
}
2012-11-16 18:19
回转逆流
Rank: 1
等 级:新手上路
帖 子:8
专家分:8
注 册:2012-11-17
收藏
得分:0 
楼上的对得好别扭。。。
2012-11-28 22:03
快速回复:关于喝矿泉水的问题,我的思路应该没有错的啊,大家帮我看看
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024707 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved