递归练习,做个奥数题
今天有个朋友问我一个小学生的奥数题,酒1元钱1瓶,2个空瓶子可以换一瓶酒,问20块钱可以喝多少瓶酒。我OUT了,我被鄙视了。
我不会,但是谁让我是写代码的呢,写了个小程序用来鄙视他。告诉他,我不仅知道20块能买多少酒,你就是20000块我也能算出来。
var allWine = 0; // 20块钱可以买20瓶酒
var otherBottle = 0;
//递归函数,瓶换酒
function bottleExchangeWine(bottle)
{
if(bottle % 2==1){ //保证瓶子的数量为偶数
if(otherBottle>=1){//若不为偶数,且之前有剩余的空瓶子
bottle += 1;//加一个瓶子
otherBottle -= 1;
}else{
bottle -= 1
otherBottle +=1;
}
}
var newWine =bottle/2;
allWine +=newWine ;
if(newWine>=1)
{
bottleExchangeWine(newWine);
}
return;
}
function getWine(){
otherBottle = 0;
allWine = parseInt(document.getElementById("txtMoney").value);
bottleExchangeWine(allWine);
alert("共有:"+allWine+"瓶酒,共有:"+otherBottle+"个空瓶子还没有换!");
}
十月 28th, 2009 at 6:34 下午
直接算也是可以的吧。
先买20瓶(+20),喝完,有20个瓶子。
换10瓶(+10),喝完,有10个瓶子。
换5瓶(+5),喝完,有5个瓶子。
换2瓶(+2),喝完,有3个瓶子。
换1瓶(+1),喝完,有2个瓶子。
换1瓶(+1),喝完,有一个瓶子。
没的换了。
加起来:20+10+5+2+1+1。
十月 30th, 2009 at 1:49 下午
貌似这题好象应该是20+10+5+2+1+1 +1
最后留一个瓶子的时候,找人借一个瓶子,兑换之后再还给他。
十一月 2nd, 2009 at 12:32 下午
20+10+5+2+1+1=39
十一月 4th, 2009 at 9:39 下午
哈,别人告诉的。
弱智的问题,要用弱智的想法去考虑
先花1块钱,喝掉1瓶酒,还剩1空瓶
有了这一空瓶子
以后每多花1块钱,喝掉1瓶酒,又多一空瓶,2空瓶换一瓶酒,又能喝一瓶,还剩一空瓶
所以,20块钱 -> 喝掉39瓶 + 1空瓶
十一月 15th, 2009 at 10:03 下午
看过此题,答案是40瓶,因为最后一个瓶子可以先跟店主换一瓶,这样就欠他一个空瓶子,把换来的喝完还他空瓶子,刚好。
十二月 12th, 2009 at 2:32 上午
没有那么复杂啦,酒1元钱1瓶,2个空瓶子可以换一瓶酒,所以两个酒瓶价值1元,一个瓶子五毛,酒就是五毛,所以20元可以喝40瓶。
四月 23rd, 2010 at 10:51 下午
直接算也是可以的吧。先买20瓶(+20),喝完,有20个瓶子。换10瓶(+10),喝完,有10个瓶子。换5瓶(+5),喝完,有5个瓶子。换2瓶(+2),喝完,有3个瓶子。换1瓶(+1),喝完,有2个瓶子。换1瓶(+1),喝完,有一个瓶子。没的换了。加起来:20+10+5+2+1+1。