• 喝啤酒


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

  • 相关阅读:
    02-链路层
    01-TCP/IP概述
    ARM Cortex-A9 (tiny 4412)
    STM32 f407 温湿度采集报警
    arduino mega 避障报距小车
    归纳法调试
    python 数据类型Ⅲ(字典)
    Python 数据类型Ⅱ(列表,元祖)
    Python 数据类型(str,int,bool)
    Python while循环&格式化输出&运算符
  • 原文地址:https://www.cnblogs.com/dzyBlog/p/5549540.html
Copyright © 2020-2023  润新知