首页 > 请教逻辑上如何思考这个问题,并用js实现

请教逻辑上如何思考这个问题,并用js实现

看到有这样一个问题:

啤酒:
2元钱1瓶
4个瓶盖换1瓶
2个空瓶换一瓶

问:
10元最多可以喝几瓶?
 
 

主要想请教逻辑上如何思考这个问题?最好还能用js实现一下


十块钱可以买5瓶酒,5瓶酒有5个瓶盖,5个空瓶;换瓶酒后3瓶酒,1个瓶盖1个空瓶;喝完有4个空瓶4个瓶盖能换3瓶啤酒;3瓶喝完有3个瓶盖3个空瓶能换1瓶啤酒声3个瓶盖1个空瓶;喝完4个瓶盖2个空瓶换2瓶啤酒;喝完剩2个空瓶两个瓶盖能换1瓶啤酒剩两个瓶盖;
那么这个实现的话主要是看瓶盖数和空瓶数来实现的,

var cap = 5;
var bottle = 5;
var num = 5;
while(cap>=4||bottle>=2){
num=num+Math.floor(cap/4)+Math.floor(bottle/2);
var t = cap;
var s = bottle;
cap = t- (Math.floor(t/4))*4 + Math.floor(t/4)+Math.floor(s/2);
bottle = s - (Math.floor(bottle/2))*2 + Math.floor(t/4)+Math.floor(s /2);
};
num
15

}没思路了,谁给改改//修改代码如下,输出是15


4个瓶盖换1瓶,一个瓶盖值 5毛钱,同样一个空瓶值 1块钱。
所以一瓶啤酒只值 5 毛钱。

所以,如果允许先借几瓶,喝完再还瓶盖和瓶子的话,十块钱可以喝 20 瓶(20恰好是4和2的整倍数)。

感谢大家的支持,更新一个方程吧,假设可以借 x 瓶,则有

10/2 = 5 
x <= (x+5)/4 + (x+5)/2

共可以喝 x + 5 瓶

function func(x) {
    let cap = Math.floor(x / 2);
    let bottle = Math.floor(x / 2);
    let count = Math.floor(x / 2);

    while(cap >=4 || bottle >=2 ){
        if(bottle >=2 ){
            bottle = bottle -2;
            bottle++;
            cap++;
            count++;
        }
        if(cap >= 4) {
            cap = cap - 4;
            bottle++;
            count++;
            cap++;
        }
    }
    return count;
}
console.log(func(10));

大概就是这样子吧.公交车上码的,错了不要介意~

【热门文章】
【热门文章】