【C语言指南】喝汽水问题
【摘要】 27 喝汽水问题是一个经典的编程问题。在这个问题中,你初始有n元钱,每瓶汽水1元。并且喝完汽水之后,每2个空瓶子可以换一瓶汽水。求可以喝到多少瓶汽水。第一种方法是先买后换,即先把所有钱买汽水,再用空瓶换汽水。第二种方法是边买边换,每次买一瓶,够用空瓶换就换,不够换就买
文章目录
一、文章简介
喝汽水问题是一个经典的编程问题。
在这个问题中,你初始有n元钱,每瓶汽水1元。并且喝完汽水之后,每2个空瓶子可以换一瓶汽水。求可以喝到多少瓶汽水。
本篇文章介绍两种解题思路及过程
1.先买再换
先用初始的n元去买n瓶汽水,这时也拥有了n个空瓶。n个空瓶再去换n/2瓶汽水,这时现有的空瓶数量为 n/2 + n%2 (n%2表示不够换一瓶的数量,可能为1或0),再用现有的空瓶去换汽水,直到空瓶数不够换一瓶汽水为止(小于2)。
1.1 代码逻辑:
放到编程中来讲:
① 首先创建变量n,读入初始金额n
②接着创建变量total用于记录可喝汽水数量,初始应该等于金额n
创建变量empty用于记录当前空瓶子数量,初始也应该等于金额n
③然后进入while循环,循环的条件是空瓶子数量>1,
循环内部,每一次循环完成——
空瓶子数量empty除2,等于本次换到的汽水数量,计入喝汽水总量
换汽水完成之后,本轮空瓶子数量= 空瓶子数量/2+空瓶子数量%2
当循环结束之后,得到的total就是可以喝的汽水总数
1.2 完整代码
1.3 运行结果
1.4 根据方法一总结优化
如果将程序多运行几次
观察结果,我们就会发现,初始金额n与可喝汽水数量total之间存在着一定规律
n=5,total=9
n=6,total=11
n=7,total=13
n=8,total=15
没错,total=2*n-1
如果在1元买一瓶,两空瓶换一瓶的基础条件下,可以根据上述规律将代码修改
2.边买边换
第二种解题思路是:
得到初始的金钱n后,优先用空瓶子去换汽水,当空瓶子不够时,再花钱买一瓶。重复上面的过程,直到没钱,以及空瓶子小于2
2.1 代码逻辑:
放到编程中来讲:
① 首先创建变量n,读入初始金额n
②接着创建变量total用于记录可喝汽水数量,初始等于0
创建变量empty用于记录当前空瓶子数量,初始等于0
③然后进入while循环,循环的条件是金钱>0,或者空瓶>=2
循环内部,每一次循环完成判断——
先判断如果空瓶子>=2,可喝汽水数量+1,空瓶子-2
如果空瓶子不够换,可喝汽水数量+1,金钱-1
当循环结束之后,得到的total就是可以喝的汽水总数
2.2 完整代码
2.3 运行结果
使用方法二和方法一的效果相同
创作不易,还望点赞支持。如有错误,还望提醒更正。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)