blog | 业余项目 | 关于Karry | RSS订阅 | 我在阅读 | 管理

递归练习,做个奥数题

今天有个朋友问我一个小学生的奥数题,酒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+"个空瓶子还没有换!");
}

点击查看

Tags:

7 Responses to “递归练习,做个奥数题”

  1. bean Says:

    直接算也是可以的吧。
    先买20瓶(+20),喝完,有20个瓶子。
    换10瓶(+10),喝完,有10个瓶子。
    换5瓶(+5),喝完,有5个瓶子。
    换2瓶(+2),喝完,有3个瓶子。
    换1瓶(+1),喝完,有2个瓶子。
    换1瓶(+1),喝完,有一个瓶子。
    没的换了。
    加起来:20+10+5+2+1+1。

  2. polarlm Says:

    貌似这题好象应该是20+10+5+2+1+1 +1
    最后留一个瓶子的时候,找人借一个瓶子,兑换之后再还给他。

  3. canaan Says:

    20+10+5+2+1+1=39

  4. 飞鱼 Says:

    哈,别人告诉的。
    弱智的问题,要用弱智的想法去考虑

    先花1块钱,喝掉1瓶酒,还剩1空瓶
    有了这一空瓶子
    以后每多花1块钱,喝掉1瓶酒,又多一空瓶,2空瓶换一瓶酒,又能喝一瓶,还剩一空瓶

    所以,20块钱 -> 喝掉39瓶 + 1空瓶

  5. 飞浪 Says:

    看过此题,答案是40瓶,因为最后一个瓶子可以先跟店主换一瓶,这样就欠他一个空瓶子,把换来的喝完还他空瓶子,刚好。

  6. toovoo Says:

    没有那么复杂啦,酒1元钱1瓶,2个空瓶子可以换一瓶酒,所以两个酒瓶价值1元,一个瓶子五毛,酒就是五毛,所以20元可以喝40瓶。

  7. Amy Says:

    直接算也是可以的吧。先买20瓶(+20),喝完,有20个瓶子。换10瓶(+10),喝完,有10个瓶子。换5瓶(+5),喝完,有5个瓶子。换2瓶(+2),喝完,有3个瓶子。换1瓶(+1),喝完,有2个瓶子。换1瓶(+1),喝完,有一个瓶子。没的换了。加起来:20+10+5+2+1+1。

Leave a Reply