喝啤酒
某人出10元去买啤酒,每瓶啤酒两元,两个空瓶可以兑换一瓶,四个盖子也可以兑换一瓶,请问,该人共可以喝多少瓶?
我开始了口算的节奏:
1. 10元可以先购买5瓶啤酒,剩下5盖子和5空瓶;
2. 用上面这5瓶啤酒中的4盖子和4空瓶再兑换3瓶,现在可以喝8瓶,剩4盖子4空瓶;
3. 这4盖子和4空瓶可以去兑换3瓶,即现在可以喝11瓶啦,还剩3盖子和3空瓶;
4. 用上面的3空瓶拿出其中两个去换一瓶回来,可以喝12瓶啦,剩4盖子和两空瓶;
5. 用上面4盖子和两空瓶再去换两瓶回来,喝14瓶啦,剩两盖子和两空瓶;
6. 最后两空瓶再兑换一瓶,哇15瓶,剩3盖子1空瓶再也不能兑换啦!
我记得小时候啤酒单价是1.5元,两元的啤酒算是好的了。花了10块钱可以喝15瓶,这老板还真大方,难道是“水货”么?我看是!
最后发神经,要是用99、100、500,1000块钱购买啤酒呢,这该不会也是口算吧,我看还是算了!
贴出代码:
var beer = (function(){
//盖子个数
var cover = 0;
//空瓶个数
var emptyBottle = 0;
//共可以喝多少瓶啤酒
var beerCount = 0;
/*
* 初始化可购买的瓶数
* @param price 啤酒单价
* @param money 出多少钱买啤酒
*/
function initBuy(price,money){
var amount = Math.floor(money/price);
for(var i = 0;i < amount;i++){
emptyBottle++;
cover++;
beerCount++;
}
};
/*
* 盖子兑换
* @param ratio 兑换比率
*/
function changeCover(ratio){
//兑换数量
var amount = Math.floor(cover/ratio);
//盖子数量若少于ratio,不能兑换
if(amount == 0)return;
cover -= amount*ratio;
//每兑换一瓶啤酒,会得到一个空瓶和一个盖子
for(var i = 0;i < amount;i++){
cover++;
emptyBottle++;
beerCount++;
}
};
/*
* 空瓶子兑换
* @param ratio 兑换比率
*/
function changeEmptyBottle(ratio){
//兑换数量
var amount = Math.floor(emptyBottle/ratio);
//空瓶数量若少于ratio,不能兑换
if(amount == 0)return;
emptyBottle -= amount*ratio;
//每兑换一瓶啤酒,会得到一个空瓶和一个盖子
for(var i = 0;i < amount;i++){
cover++;
emptyBottle++;
beerCount++;
}
};
/*
* 输出结果
* @param price 单价
* @param money 出多少钱买啤酒
* @param coverRatio 盖子兑换比率
* @param bottleRatio 空瓶兑换比率
*/
function printResult(price,money,coverRatio,bottleRatio){
initBuy(price,money);
do{
changeCover(coverRatio);
changeEmptyBottle(bottleRatio);
}
while(cover >= coverRatio || emptyBottle >= bottleRatio);
console.log("可以喝"+beerCount+"瓶,剩余空瓶"+emptyBottle+",剩余盖子"+cover);
};
return printResult;
})();
beer(2,10,4,2);
> 可以喝15瓶,剩余空瓶1,剩余盖子3
20元可以喝35瓶,剩余空瓶1,剩余盖子3。
50元可以喝95瓶,剩余空瓶1,剩余盖子3。
99元可以喝191瓶,剩余空瓶1,剩余盖子3。
100元可以喝195瓶,剩余空瓶1,剩余盖子3。
1000元可以喝1995瓶,剩余空瓶1,剩余盖子3。
10000元可以喝19995瓶,剩余空瓶1,剩余盖子3。
100000元可以喝199995瓶,剩余空瓶1,剩余盖子3。
这样算下来,每瓶单价大于并接近5毛,5毛也不亏。。。
浙公网安备 33010602011771号