题面
啤酒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();
}