一道面试题,总共能喝多少瓶啤酒

题面

啤酒2元一瓶,2个空瓶可以换一瓶,4个瓶盖可以换一瓶,现在给10元钱,总共能喝多少瓶啤酒?

分析

从题面可以看出是一个循环的过程,先买啤酒,喝完再拿瓶子或盖子换,最终当XX条件符合时将不再能循环进行下去,推演到算法里可以想到递归算法。

标题

以下仅以JS代码为例写下这个算法:

var money = 10;
var count = Maht.floor(money/2); //喝几瓶计数
var curPing = count;             //当前空瓶数
var curGai = count;              //当前瓶盖数

drinkHowMany();
console.log("还剩"+curPing+"个空瓶");
console.log("还剩"+curGai+"个瓶盖");

function drinkHowMany(){
    if(curPing<2&&curGai<4){
        //递归终结条件
        return;
    }
    if(curGai>=4){
        var curAdd1 = Math.floor(curGai/4);
        count+=curAdd1;
        curGai+=curAdd1+curGai%4;//增加的瓶数+剩余于的瓶盖;
        curPing+=curAdd1;
    }
    if(curPing>=2){
        var curAdd2 = Math.floor(curPing/2);
        count+=curAdd2;
        curPing=curAdd2+curPing%2; //增加的瓶数+剩余于空瓶;
        curGai+=curAdd2;
    }
    drinkHowMany();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值