当前位置: 代码迷 >> Java相关 >> 关于喝矿泉水的问题,我的思路应该没有错的啊,大家帮我看看
  详细解决方案

关于喝矿泉水的问题,我的思路应该没有错的啊,大家帮我看看

热度:84   发布时间:2012-11-10 22:27:44.0
关于喝矿泉水的问题,我的思路应该没有错的啊,大家帮我看看
/*
需求:矿泉水一元钱一瓶,每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  

----------------解决方案--------------------------------------------------------
     好像没错啊
----------------解决方案--------------------------------------------------------
2个错误
第一,代码没有考虑单数问题。例如5个空瓶子,可以换2个矿泉水和余留1个空瓶。而代码中直接整除没有考虑上次/上上次遗留下来的1个空瓶子

第二,n = p/2; 而p永远不会再变了,所以n经过2次循环后也不会再改变,这是死循环的原因。

----------------解决方案--------------------------------------------------------
楼上正解
----------------解决方案--------------------------------------------------------
看看
----------------解决方案--------------------------------------------------------
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

----------------解决方案--------------------------------------------------------
首先你的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);
    }
}
----------------解决方案--------------------------------------------------------
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);
    }
}
----------------解决方案--------------------------------------------------------
楼上的对得好别扭。。。
----------------解决方案--------------------------------------------------------
  相关解决方案