读书人

1000瓶汽水每饮3瓶赚一瓶最终喝了

发布时间: 2013-11-26 22:51:31 作者: rapoo

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- -

读书人网 >asp.net

热点推荐