首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

1000瓶汽水,每饮3瓶赚一瓶,最终喝了多少瓶,剩几个空瓶

2013-11-26 
1000瓶汽水,每喝3瓶赚一瓶,最终喝了多少瓶,剩几个空瓶?题目:共有1000瓶汽水,每喝完后一瓶得到的一个空瓶子

1000瓶汽水,每喝3瓶赚一瓶,最终喝了多少瓶,剩几个空瓶?
题目:共有1000瓶汽水,每喝完后一瓶得到的一个空瓶子,每3个空瓶子又能换1瓶汽水,喝掉以后又得到一个空瓶子,问总共能喝多少瓶汽水,最后还剩余多少个空瓶子?
[解决办法]


            int count = 10;
            int empty = 0;
            while (count > 0)
            {
                Console.WriteLine("喝一瓶饮料");
                empty++;
                count--;
                if (empty == 3)
                {
                    Console.WriteLine("3个空瓶子兑换一瓶饮料");
                    count += 1;
                    empty = 0;
                }
                Console.WriteLine("剩余饮料数:{0},剩余空瓶子:{1}", count, empty);
            }
            Console.Read();

[解决办法]
简化一下:


            int count = 10;
            int flag = 3;
            int empty = count / flag + count % flag;
            while (empty >= flag)
            {
                empty = empty / flag + empty % flag;
            }
            Console.WriteLine("剩余饮料数:0,剩余空瓶子:{0}", empty);
            Console.Read();

[解决办法]
        public int[] DrinkWater(int total)
        {
            int left = 0;
            for (int i = 1; i <= total; i++)
            {
                left++;
                if (left == 3)
                {
                    left = 0;
                    total++;
                }
            }
            return new int[2] { total, left };
        }

[解决办法]
JS

   function GetGlassnum() {
       //饮料瓶
        var gn = 1000;
        while (gn > 2) {
        // 3个瓶换一个饮料
            gn = gn - 3;
         //
            gn = gn + 1;
        }


        alert(gn);
    }


[解决办法]
完整JS


 function GetGlassnum() {

        var n = 0;
       //饮料瓶
        var gn = 1000;
        while (gn > 2) {
        // 3个瓶换一个饮料
            gn = gn - 3;
         //
            gn = gn + 1;
            n++;
        }
        //剩余空瓶数 
        alert(gn);
        //一共喝饮料数
        n = 1000 + n;
        alert(n);
    }

[解决办法]
程序算出来的结果是 

     总共喝了1499瓶汽水,剩下两个空瓶子。
[解决办法]
public void coco()
        {
            //我是这样理解的:
            //你是要每3瓶喝完了才知道中了一瓶,不是每3瓶中只喝一瓶就中撒。所以是要喝999瓶,中333瓶,比例是3:1。然后喝完999瓶剩下的不足3瓶(和3取余)的瓶数就不喝了。就装又饮料
            int buy = 1000;
            int allnullnum=0;
            int num=0;//中奖瓶子数
            int allnum=0;//喝了汽水的瓶子数
            int noteate=0;//未喝瓶数
            for (allnullnum=1000; allnullnum >= 1; allnullnum = allnullnum / 3)
            {
                //allnullnum = buy / 3;
                //allnum = 2 * allnullnum + (buy % 3);
                num += allnullnum;
                allnum += 3 * allnullnum;
                if (allnullnum % 3 != 0)
                {
                    noteate += allnullnum % 3;

                }
            }
            num = num - buy;
            allnum = allnum - 3 * buy;

        }
[解决办法]
简化版

   function GetGlassnum() {
       //换取的饮料
        var n = 0;

       //饮料 
        var gn = 1000;
        while (gn > 2) {
        // 3个瓶换一个饮料,实际就使少了2个空瓶
            gn = gn - 2;
        //换取的饮料
            n++;
        }
        //剩余空瓶数 
        alert(gn);
        //一共喝饮料数
        n = 1000 + n;
        alert(n);
    }
  //结果 剩余空瓶数:2  共喝饮料数:1499

楼主 给分
[解决办法]
1000/3=333余1
333/3=111
111/3=37
37/3=12余1
12/3=4

总计1000+333+111+37+12+4=1497,还剩2个不够再换一瓶的。
[解决办法]

            int count = 1000;


            int flag = 3;
            int empty = count;
            while (empty >= flag)
            {
                int temp = empty / flag;
                count += temp;
                empty = temp + empty % flag;
            }
            Console.WriteLine("共喝饮料数:{0},剩余空瓶子:{1}", count, empty);
            Console.Read();


[解决办法]

int all = 1000;         //总瓶数
int drink = 0;          //已经喝掉的数量
int empty = 0;          //最后剩余空瓶子
while (all > 0)
{
    all--;
    drink++;
    empty++;
    if (empty == 3)
    {
        empty = 0;
        all++;
    }
}

Response.Write("已经喝掉的数量:" + drink + "   最后剩余空瓶子:" + empty);

结果:
已经喝掉的数量:1499  最后剩余空瓶子:2 

[解决办法]
3+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+……其实也很好理解的

开始喝3瓶后,会返一个空瓶子,所以后面只需再喝掉两瓶,又可以返一个,以此类推...
数学计算就是
喝的瓶数:1000 + (1000-3)/2 + (1000-3)%2 = 1499
最后空瓶:(1000-3)%2 + 1 = 2 (不会有零的情况,可以参照63#的程序)


[解决办法]

protected void Sum()
    {
        int full = 1000;
        int empty = 0;

        int count = 0;

        for (int i = 0; ; i++)
        {
            full--;
            empty++;
            if (empty == 3)
            {
                full++;
                empty = 0;
            }
            count = i;
            if (full == 0)
            { break; }
        }

        this.tbCount.Text = count.ToString();
        this.tbEmpty.Text = empty.ToString();
    }


[解决办法]
无聊跟一个:
            int x = 1000, y = 0;
            while (true)
            {
                x--;
                y++;
                if (y == 3)
                {
                    x++; y = 0;
                }
                if (x == 0) break;
            }
            Console.WriteLine(y);
[解决办法]
引用:
为什么我算出来的是0个呢,
思路:喝1000瓶,得到1000个空瓶,然后开始兑换-----1000/3 空瓶1个,333/3,111/3,37/3余一个空瓶,12/3,4/3再次余一个空瓶,,最后剩余共3个空瓶,再兑换一个,那么不是就没有空瓶了么?

这种思路为何不对?



4/3 余下了2个空瓶,一个是本来剩的,还有一个使用3个空瓶换回来的,又被喝完了剩的,再加上之前剩的2个,此时有4个空瓶,拿3个再换1个,因此最后是2个空瓶,而不是没有。
[解决办法]
复杂问题简单话,简单问题实例化,实例问题复杂化。

我把楼主问题做个简单的实例:
题目:共有1瓶汽水,每喝完后一瓶得到的一个空瓶子,每3个空瓶子又能换1瓶汽水,喝掉以后又得到一个空瓶子,问总共能喝多少瓶汽水,最后还剩余多少个空瓶子? 
想想这个题目还真有意思,这瓶水该喝还是不该喝呢,总感觉少了点什么。喝一瓶得一个空瓶子,只要我足够能喝,就可以把所有的瓶子都变成空瓶子。
[解决办法]
引用:
复杂问题简单话,简单问题实例化,实例问题复杂化。

我把楼主问题做个简单的实例:
题目:共有1瓶汽水,每喝完后一瓶得到的一个空瓶子,每3个空瓶子又能换1瓶汽水,喝掉以后又得到一个空瓶子,问总共能喝多少瓶汽水,最后还剩余多少个空瓶子? 
想想这个题目还真有意思,这瓶水该喝还是不该喝呢,总感觉少了点什么。喝一瓶得一个空瓶子,只要我足够能喝,就可以把所有的瓶子都变成空瓶子。


简单化,我觉得可以这样,1000瓶喝完之后,只要手里的瓶子大于等于3个(够换的标准),那么就可以每次拿2个瓶子换水喝(省得折腾瓶子),这样一来,除了最后只剩2个空瓶的情况外,其他情况2个瓶子都可以换到水喝,1000 / 2 - 1 = 499, 也就是 喝了 1499, 剩2 了
[解决办法]
i = 1000
k = 0 
m = 0 
while i > 0:
    i = i - 1
    m = m + 1 
    if k < 3 :
        k = k+1 
    else:
        k = 1
        i = i + 1
    print 'i=%d,k=%d,m=%d'%(i,k,m)
[解决办法]
对于搞数学推导的方法,我还是那个观点,不要仅仅纠结于最后剩下几个瓶子,能够算出一共喝了多少瓶汽水才算这正理解这个问题。

至于最后剩下的瓶子数,反正不是1瓶就是2瓶,不可能是0瓶。二选一情况下甚至瞎猜一下都有一般的概率蒙对。如果你要数学推导,不要仅仅推导最后剩了几瓶汽水,要推导出“喝了多少瓶汽水”这个公式来!
[解决办法]

int totalSoda = 1000;//总共的汽水
int emptyBottle = 0 ;//空瓶子
int count=0;//喝的次数
while(count<totalSoda){
count++;
emptyBottle++;
if(emptyBottle==3){
emptyBottle = 0;
totalSoda++;
}
}
System.out.println("喝的次数:"+count+"\n空瓶子数:"+emptyBottle);

[解决办法]
无聊发帖
1499    2

int count = 1000;
int res = count;
int a = 0;
while(count/3 > 0){
res += count/3;
count = count/3 + count%3;
a = count % 3;
}
System.out.println(res);
System.out.println(a);

[解决办法]
沙弥搞笑? 三瓶换一瓶,不就是 -3+1=-2,每次减二瓶,1000/2=500 次减完,不过到剩下 4瓶的时候 ,4-3=1,返回 1 ,1+1=2,没得换了,所以余下 2瓶,少交换1 次 500-1=499次,1000+499=1499,余下2瓶。
[解决办法]
        private static int Test()
        {
            int a = 1000;
            int c = 1;
            while (a > 0)
            {
                a--;
                c++;
                if (c >= 3)
                {
                    a += 1;
                    c = 0;
                }
            }
            return c;
        }


咋得出的是1- - 

热点排行