前言

今天看到群里有个小伙伴发了一个问题,我挺感兴趣的,一元钱一瓶汽水,喝完后两个空瓶能换一瓶汽水,问:你有20元钱,可以喝到几瓶汽水?

我就纳闷了,这个人是谁啊,这么能喝,按照一瓶500ml,这哥们得喝几十瓶,少说也得喝一桶桶装水吧,反正我是一时半会喝不下这么多,但是这并不妨碍我这个小脑袋来想这个问题。

建议大家先思考,在来看代码。

以下内容都是 明明有话说 的个人想法,与 明明有话说 本人无关


流程图

先说好,不准打脸。就算是我画太丑了,画错了,也不准打脸

高清流程图链接

代码

/*** 假设 一元钱一瓶汽水,喝完后两个空瓶能换一瓶汽水,问:你有20元钱,可以喝到几瓶汽水?* @param {*} money 总资金* @param {*} price 单瓶价格* @param {*} boon 几个空瓶子能换一瓶水* @returns { result: [ 20, 10, 5, 2, 1, 1 ], count: 39 }*/
function count(money, price = 1, boon = 2) {// 一次买20瓶 => 20// 20 => 10// 10 => 5// 5 => 2 .. 1// 2 => 1// 1+1 => 1if (boon <= 1) {throw new Error('不能用' + boon + '换一个瓶子');}// 剩下的空瓶const emptyBottle = money / price;// 结果const result = [emptyBottle];// 计算中的余数(空瓶)let remainders = [];/*** 核心 - 计算空瓶数量(递归)* @param {*} num 水瓶数量* @param {*} flag 清空剩余空瓶的开关* @returns*/function fun(num, flag = false) {// 当兑换的数量小于最低的额度时,停止递归if (num < boon) {// 判断结余的空瓶,再次计算if (remainders.length > 0) {const count = remainders.reduce((perVal, curVal) => perVal + curVal);// 继续下一次递归fun(count, true);}return;}// 计算兑换的水瓶数量const waterBottle = num / boon;if (waterBottle % boon === 0) {// 兑换的空瓶数量刚刚刚好,不会有剩余result.push(waterBottle);// 继续下一次递归fun(waterBottle);} else if (waterBottle % boon > 0) {// 兑换的空瓶后,有剩余不足以兑换新的水瓶const _temp = waterBottle % 2;result.push(Math.floor(waterBottle));// 如果开始计算剩余空瓶数量,重置数组flag ? (remainders = []) : remainders.push(_temp);// 继续下一次递归fun(waterBottle - _temp);}}fun(emptyBottle);return {result,count: result.reduce((perVal, curVal) => perVal + curVal),};
}// { result: [ 20, 10, 5, 2, 1, 1 ], count: 39 }
console.log(count(20));

总结

小子能力有限,只能做到这里,还望大佬不吝赐教,让小子多学习一点,万分感谢!!!

原创不易,转载请标名出处

一元钱一瓶汽水,喝完后两个空瓶能换一瓶汽水,问:你有20元钱,可以喝到几瓶汽水?相关推荐

  1. Python3 解决1元钱一瓶汽水,喝完后两个空瓶换一瓶

    注意要点:拿两个空瓶换1瓶汽水,会增加1个空瓶,也会多喝到一瓶汽水. 代码: '''------------------------------------------------------ [程序 ...

  2. 15元钱一杯咖啡,喝完后两个空杯换一杯,问:你有100元钱,最多可以喝到几杯咖啡

    15元钱一杯咖啡,喝完后两个空杯换一杯,问:你有100元钱,最多可以喝到几杯咖啡 public static void main(String args[]){int count = 100/15; ...

  3. 【C/C++题目】1 元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有 20 元钱,最多可以喝到几瓶汽水?(可以借但要有借有还)

    文章目录 一.实现代码 二.运行结果 根据你借钱的多少,得出你最多可以喝多少瓶 一.实现代码 #include <iostream> using namespace std; int ma ...

  4. 746-1元钱一瓶汽水,喝完后2个空瓶换1瓶汽水

    题目如下 1元钱一瓶汽水,喝完后2个空瓶换1瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水? 解题思路 两个空瓶 = 一个满瓶的价值, 实际上汽水价值为0.5元, 20元正好40瓶的气水 最后剩一个空 ...

  5. 小明买12瓶汽水,喝完后3个空瓶可以换1瓶汽水,问小明一共可以喝多少瓶汽水?

    const totalCount = 12 // 一共多少瓶汽水 const change = 3 // 3个空瓶换一瓶汽水 let totalCo = 0 // 喝到总瓶数 function num ...

  6. C语言编程《1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少瓶汽水》

    C语言编程<1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少瓶汽水> 1.喝汽水编程思路 2.代码编写 1.喝汽水编程思路 (1)首先是用现有的钱购买汽水,一共是20元,所以第一 ...

  7. 1元1瓶水2个空瓶换一瓶水,20元可以最多喝多少瓶解析

    使用的是python 语言的,迭代和递归找每一次比上一次的规律 def f1(pay): money = 1 sum = 1 while money < pay: money = money + ...

  8. 凑钱1,2,5凑20元钱有多少可能 共有哪几种可能

    <script type="text/javascript"> var n =0; var s =0;for (var a =0 ;a <=20; a ++ ){ ...

  9. 1元钱买一瓶汽水,2个空瓶换一瓶汽水,3个瓶盖换一瓶汽水,问:3块钱能和多少瓶汽水?

    问题: 1元钱买一瓶汽水,2个空瓶换一瓶汽水,3个瓶盖换一瓶汽水,问:3块钱能和多少瓶汽水? 代码实现: public class DrinkWater {public static void mai ...

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

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

最新文章

  1. docker-3-常用命令(上)
  2. 如何在页面调用JS函数的代码
  3. linux mysql5.6 编码_CentOS 7下修改MySQL5.6编码方式 解决网站中文显示问号
  4. 【转载】 C++中回车换行(\n\r)和换行(\r)的区别
  5. Java编译过程、c/c++编译过程区别
  6. Pytorch(六) --处理高维特征数据
  7. screen 断开 screen -r 不能进入断开的会话
  8. 基于Echarts+HTML5可视化数据大屏展示—Echart图例使用
  9. 零基础学习鸿蒙开发,零基础学习鸿蒙App开发 (第一天)
  10. 多功能网址导航源码 包含交易系统等多功能
  11. Fragment+ViewPager+ButterKnife时控件会报空指针问题
  12. java5、java6、java7、java8的新特性
  13. python汇率的转换程序_用Python制作汇率转换小程序
  14. R语言ggplot2可视化:loess回归曲线可视化、填充两条 loess回归曲线之间的区域实战(Fill region between two loess-smoothed lines)
  15. 《steam community 启动发现端口被占用》
  16. ubuntu linux目录绿色高亮问题
  17. 在Visual Studio.NET中更改颜色-黑色与白色
  18. 回顾微生物学的发展——我们在哪里,我们要去哪里?
  19. new ActionListener(){}
  20. 解决桌面IE图标无法删除方法

热门文章

  1. SpringBoot排序之Order注解
  2. 数据库系统概论笔记三——销售管理子系统E-R图的设计
  3. PS 渐变工具使用
  4. 摩尔庄园手游测评——爷青回or爷青毁?
  5. Web浏览器与Web服务器之间的通信过程
  6. javaScript一元四次、三次方程求根算法
  7. 读《富爸爸,穷爸爸》后感(二)
  8. Arduino最简单的例程--使用面包板点灯
  9. 云计算要掌握哪些知识点 该怎么学云计算开发
  10. 在github上建立自己的网站