一元钱一瓶汽水,喝完后两个空瓶能换一瓶汽水,问:你有20元钱,可以喝到几瓶汽水?
前言
今天看到群里有个小伙伴发了一个问题,我挺感兴趣的,一元钱一瓶汽水,喝完后两个空瓶能换一瓶汽水,问:你有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元钱,可以喝到几瓶汽水?相关推荐
- Python3 解决1元钱一瓶汽水,喝完后两个空瓶换一瓶
注意要点:拿两个空瓶换1瓶汽水,会增加1个空瓶,也会多喝到一瓶汽水. 代码: '''------------------------------------------------------ [程序 ...
- 15元钱一杯咖啡,喝完后两个空杯换一杯,问:你有100元钱,最多可以喝到几杯咖啡
15元钱一杯咖啡,喝完后两个空杯换一杯,问:你有100元钱,最多可以喝到几杯咖啡 public static void main(String args[]){int count = 100/15; ...
- 【C/C++题目】1 元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有 20 元钱,最多可以喝到几瓶汽水?(可以借但要有借有还)
文章目录 一.实现代码 二.运行结果 根据你借钱的多少,得出你最多可以喝多少瓶 一.实现代码 #include <iostream> using namespace std; int ma ...
- 746-1元钱一瓶汽水,喝完后2个空瓶换1瓶汽水
题目如下 1元钱一瓶汽水,喝完后2个空瓶换1瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水? 解题思路 两个空瓶 = 一个满瓶的价值, 实际上汽水价值为0.5元, 20元正好40瓶的气水 最后剩一个空 ...
- 小明买12瓶汽水,喝完后3个空瓶可以换1瓶汽水,问小明一共可以喝多少瓶汽水?
const totalCount = 12 // 一共多少瓶汽水 const change = 3 // 3个空瓶换一瓶汽水 let totalCo = 0 // 喝到总瓶数 function num ...
- C语言编程《1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少瓶汽水》
C语言编程<1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少瓶汽水> 1.喝汽水编程思路 2.代码编写 1.喝汽水编程思路 (1)首先是用现有的钱购买汽水,一共是20元,所以第一 ...
- 1元1瓶水2个空瓶换一瓶水,20元可以最多喝多少瓶解析
使用的是python 语言的,迭代和递归找每一次比上一次的规律 def f1(pay): money = 1 sum = 1 while money < pay: money = money + ...
- 凑钱1,2,5凑20元钱有多少可能 共有哪几种可能
<script type="text/javascript"> var n =0; var s =0;for (var a =0 ;a <=20; a ++ ){ ...
- 1元钱买一瓶汽水,2个空瓶换一瓶汽水,3个瓶盖换一瓶汽水,问:3块钱能和多少瓶汽水?
问题: 1元钱买一瓶汽水,2个空瓶换一瓶汽水,3个瓶盖换一瓶汽水,问:3块钱能和多少瓶汽水? 代码实现: public class DrinkWater {public static void mai ...
- JAVA2块钱瓶子_啤酒2元一瓶,4个瓶盖换一瓶,2个空瓶换一瓶,问:10元钱可以喝几瓶。用java编程解出答案,求大神们帮忙...
点击查看啤酒2元一瓶,4个瓶盖换一瓶,2个空瓶换一瓶,问:10元钱可以喝几瓶.用java编程解出答案,求大神们帮忙具体信息 答:package test;public class Test {publ ...
最新文章
- docker-3-常用命令(上)
- 如何在页面调用JS函数的代码
- linux mysql5.6 编码_CentOS 7下修改MySQL5.6编码方式 解决网站中文显示问号
- 【转载】 C++中回车换行(\n\r)和换行(\r)的区别
- Java编译过程、c/c++编译过程区别
- Pytorch(六) --处理高维特征数据
- screen 断开 screen -r 不能进入断开的会话
- 基于Echarts+HTML5可视化数据大屏展示—Echart图例使用
- 零基础学习鸿蒙开发,零基础学习鸿蒙App开发 (第一天)
- 多功能网址导航源码 包含交易系统等多功能
- Fragment+ViewPager+ButterKnife时控件会报空指针问题
- java5、java6、java7、java8的新特性
- python汇率的转换程序_用Python制作汇率转换小程序
- R语言ggplot2可视化:loess回归曲线可视化、填充两条 loess回归曲线之间的区域实战(Fill region between two loess-smoothed lines)
- 《steam community 启动发现端口被占用》
- ubuntu linux目录绿色高亮问题
- 在Visual Studio.NET中更改颜色-黑色与白色
- 回顾微生物学的发展——我们在哪里,我们要去哪里?
- new ActionListener(){}
- 解决桌面IE图标无法删除方法