转载请注明出处:http://blog.csdn.net/li396864285/article/details/51519786

【原创】10元买啤酒2个空瓶换一瓶4个瓶盖换一瓶,经典算法原题目:10元钱去买啤酒,2个空瓶可兑换一瓶,4个瓶盖可兑换一瓶,请问总共能喝多少瓶?

</pre><pre code_snippet_id="1699391" snippet_file_name="blog_20160527_1_8970255" name="code" class="java">//10元钱买5瓶啤酒,2个瓶盖换一瓶,4个空瓶换一瓶,10钱到底能买多少瓶啤酒?
/*** Created by lee on 2016/5/27.*/
public class BottleTest {public static void main(String[] args){int yourMoney = 10;TurnBeerInfo turnBeerInfo = new TurnBeerInfo();buyBeer(turnBeerInfo,yourMoney);int i = 0;while(turnBeerInfo.bottleNum>=2||turnBeerInfo.coverNum>=4){compute(turnBeerInfo,++i);}System.out.println("总共喝过"+turnBeerInfo.drinkSumNum+"瓶啤酒,还剩下"+turnBeerInfo.bottleNum+"个瓶子,"+turnBeerInfo.getCoverNum()+"个瓶盖");}public static void buyBeer(TurnBeerInfo turnBeerInfo,int money){int beerNum = money/2;turnBeerInfo.drinkSumNum = beerNum;turnBeerInfo.bottleNum = beerNum;turnBeerInfo.coverNum = beerNum;}public static void compute(TurnBeerInfo turnBeerInfo,int i){System.out.println("第"+i+"次兑换,您目前总共喝过"+turnBeerInfo.drinkSumNum+"瓶啤酒,还剩下"+turnBeerInfo.bottleNum+"个瓶子,"+turnBeerInfo.getCoverNum()+"个瓶盖");if(turnBeerInfo.bottleNum/2>0){int bottleTurnNum =turnBeerInfo.bottleNum/2;//用瓶子兑换了bottleTurnNum瓶酒,又产生了bottleTurnNum个瓶子,bottleTurnNum个盖子turnBeerInfo.drinkSumNum += bottleTurnNum;//1:累加喝过啤酒总数turnBeerInfo.coverNum += bottleTurnNum;//2:累加瓶盖数量turnBeerInfo.bottleNum = turnBeerInfo.bottleNum%2+bottleTurnNum;//3:重新计算剩余瓶子数量,请记得把刚兑换的酒产生的瓶子,也及时累加}if(turnBeerInfo.coverNum/4>0){int coverTurnNum = turnBeerInfo.coverNum/4;//用盖子兑换了coverTurnNum瓶酒,又产生了coverTurnNum个瓶子,coverTurnNum个盖子turnBeerInfo.drinkSumNum += coverTurnNum;//1:累加喝过啤酒总数turnBeerInfo.bottleNum += coverTurnNum;//2:累加瓶子数量turnBeerInfo.coverNum = turnBeerInfo.coverNum%4+coverTurnNum;//3:重新计算剩余瓶盖数量,请记得把刚兑换的酒产生的盖子,也及时累加}return ;}public static class TurnBeerInfo{private int bottleNum;//剩余瓶子数量,2个瓶子可换1瓶啤酒private int coverNum;//剩余的盖子数量,4个盖子可换1瓶啤酒private int drinkSumNum;public int getBottleNum() {return bottleNum;}public void setBottleNum(int bottleNum) {this.bottleNum = bottleNum;}public int getCoverNum() {return coverNum;}public void setCoverNum(int coverNum) {this.coverNum = coverNum;}public int getDrinkSumNum() {return drinkSumNum;}public void setDrinkSumNum(int drinkSumNum) {this.drinkSumNum = drinkSumNum;}}}

请参考以上代码,其中关键点是计算时,第3步骤,一定记得把刚兑换的酒产生的瓶子和盖子放入余数中。

现在,你可以很清楚地知道,当你有10元钱,你最多可以喝多少瓶:

第1次兑换,您目前总共喝过5瓶啤酒,还剩下5个瓶子,5个瓶盖
第2次兑换,您目前总共喝过8瓶啤酒,还剩下4个瓶子,4个瓶盖
第3次兑换,您目前总共喝过11瓶啤酒,还剩下3个瓶子,3个瓶盖
第4次兑换,您目前总共喝过13瓶啤酒,还剩下3个瓶子,1个瓶盖
第5次兑换,您目前总共喝过14瓶啤酒,还剩下2个瓶子,2个瓶盖

总共喝过15瓶啤酒,还剩下1个瓶子,3个瓶盖

假如你有12元,最多可以喝到多少瓶:

第1次兑换,您目前总共喝过6瓶啤酒,还剩下6个瓶子,6个瓶盖
第2次兑换,您目前总共喝过11瓶啤酒,还剩下5个瓶子,3个瓶盖
第3次兑换,您目前总共喝过14瓶啤酒,还剩下4个瓶子,2个瓶盖
第4次兑换,您目前总共喝过17瓶啤酒,还剩下3个瓶子,1个瓶盖
第5次兑换,您目前总共喝过18瓶啤酒,还剩下2个瓶子,2个瓶盖

总共喝过19瓶啤酒,还剩下1个瓶子,3个瓶盖

很神奇吧。

【原创】10元买啤酒2个空瓶换一瓶4个瓶盖换一瓶经典算法相关推荐

  1. 10元买啤酒问题Java递归

    问题描述: 这是经典的递归问题,但是这个递归算法新加了条件会稍微难一点. 1.可以问店家借酒 2.喝到手里没有瓶子和瓶盖为止 问题不是很难,但如果不打草稿直接码会有一定难度. 注意事项: 1.编写代码 ...

  2. IBM面试:8元买鸡9元卖10元买回11元卖能挣几元?

    这两天在网络上看到,IBM有一道经典面试题:8元钱买一只鸡,9块钱卖出,后悔了,又以10元买回来,再以11元卖出去,问最后赚了多少钱? 这道题,在美国本土面试,世界上最聪明的印度人.犹太人都答不对.有 ...

  3. 卡特兰数:2N个人排队买电影票,N个人持5元买票,N个人持10元买票.售票处在售票前只有票没有钱,票价5元 ,问有多少种排队方式 能让2N个人顺利买票,并且输出所有排队队列(不会因为找钱问题)

    分析 n = 0 时,队列为空,可以认为只有一种: n = 1 时,队列:5 ,10  共有1种: n = 2 时 ,队列: 5, 10,5,10 5,5,10,10   共有两种 n = 3时, 队 ...

  4. 10元喝啤酒数学题 c语言,《C语言程序设计》试卷3

    <C语言程序设计>试卷三 姓名:班级:学号: 一.单项选择题(每小题1分,共30分) 1.以下叙述正确的是() ①在C程序中,main函数必须位于程序的最前面②C程序的每行中只能写一条语句 ...

  5. JAVA2块钱瓶子_啤酒2元一瓶,4个瓶盖换一瓶,2个空瓶换一瓶,问:10元钱可以喝几瓶。用java编程解出答案,求大神们帮忙...

    点击查看啤酒2元一瓶,4个瓶盖换一瓶,2个空瓶换一瓶,问:10元钱可以喝几瓶.用java编程解出答案,求大神们帮忙具体信息 答:package test;public class Test {publ ...

  6. 一个人有10元钱,买啤酒2元钱一瓶,两个啤酒瓶换一瓶,四个啤酒盖换一瓶,请问此人一个喝了多少瓶?

    可以喝到15瓶或者20瓶,因为有两种计算方式,所以有两种结果 1.不许借的话,可以喝到15瓶: 第一轮,买5瓶,(得到5空瓶,5盖) 第二轮,可以换3瓶,(剩余4空瓶,4盖) 第三轮,可以换3瓶,(剩 ...

  7. 每瓶啤酒2元,2个空酒瓶或4个瓶盖可换1瓶啤酒。10元最多可喝多少瓶啤酒?

    <?echo "每瓶啤酒2元,2个空酒瓶或4个瓶盖可换1瓶啤酒.n元最多可喝多少瓶啤酒?<br/>";for ($i=0; $i<=100 ; $i++) ...

  8. python随想之python的脑力小运动买酒问题(2元一瓶酒,2个空瓶换一瓶,4个瓶盖换一瓶)

    脑力小运动 预防痴呆的小问题 2元一瓶酒,2个空瓶换一瓶,4个瓶盖换一瓶 问10块钱买几瓶酒?? 使用面向对象的方法 class Change:def __init__(self,money):sel ...

  9. 喝酒问题:啤酒2元一瓶 4个瓶盖能换1瓶啤酒,2个空瓶也能换1瓶啤酒

    今天被同事问到一个喝酒的问题,题目如下: 啤酒2元一瓶 4个瓶盖能换1瓶啤酒,2个空瓶也能换1瓶啤酒,问:10元钱最多能喝几瓶酒? 于是乎写了一段小代码来解决这个问题: package test2;i ...

最新文章

  1. Exchange 2013部署系列之(七)配置SSL多域名证书
  2. 自然人税收管理系统扣缴客户端服务器超时,“自然人税收管理系统”扣缴客户端常见问题十问十答...
  3. 解决vue里iscroll(better-scroll)点击触发两次和初始化无法滚动问题!
  4. python 数据写入json文件时中文显示Unicode编码问题
  5. 190513每日一句
  6. [GIS原理] 10.2 空间插值
  7. 建立民间贷款集资合法化
  8. 磁盘怎么删除分区,磁盘管理怎么删除分区
  9. 回归分析-常用统计量含义解析
  10. Nginx 企业级优化
  11. php 卡路里计算,热量换算_懒人工具|www.ab173.com
  12. 英雄联盟|王者|穿越火线 bgm AI配乐大赛分享
  13. 为你的App瘦身,优化你的App
  14. 反射调用目标异常可能原因之一解决java.lang.reflect.InvocationTargetException
  15. fpu测试_仪器仪表 —— 一氧化碳测试仪
  16. 群签名技术的理解和总结
  17. Roboware Studio详细安装教程 (ROS kinetic)以及简单使用
  18. 吴敬琏:我国城市化主要问题是效率太低-吴敬琏-城市化-效率太低
  19. 网络通信过程-非常详细
  20. android:onKeyDown 方法

热门文章

  1. c语言 函数教学反思,《函数的单调性》教学反思
  2. web图书销售管理系统_图书管理系统的主要功能有哪些?
  3. Android service几个问题
  4. Java基础21-JavaWeb(01)【HTML】
  5. 实战批量查询四级成绩
  6. 一起来复习Data Science:统计学中那些让人容易遗忘的知识点
  7. Charles安装破解
  8. 中文Python(1)使用中文Python编程更简单易懂
  9. AD GPO应用实例
  10. 计算机文化基础概括内容简介,计算机文化基础