某人出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毛也不亏。。。