FCC(ES6写法) Exact Change
2024-10-11 07:39:44
设计一个收银程序 checkCashRegister()
,其把购买价格(price
)作为第一个参数 , 付款金额 (cash
)作为第二个参数, 和收银机中零钱 (cid
) 作为第三个参数.
cid
是一个二维数组,存着当前可用的找零.
当收银机中的钱不够找零时返回字符串 "Insufficient Funds"
. 如果正好则返回字符串 "Closed"
.
否则, 返回应找回的零钱列表,且由大到小存在二维数组中.
思路:
1.remainder表示剩余要找的钱,arr里放需要的零钱数组,value表示总共要找的钱的总值。这里要分清value总值和total总值。
2.用循环计算出数组里的钱,用total来表示零钱总值,要明白cid[i][1]存放的是该零钱的价值,就很好理解了,第一层循环条件同时保证该零钱有值,且找到满足要找钱的最大数组的值。
3.在循环中因为从大到小,就只要考虑,c表示可以找的最大零钱的个数,如果要找的钱大于了当前已有最大数组的值,则相减后,把当前数组放入arr[j]并让j自加,如果小于,就减掉当前数组最多能减掉的值并把将当前零钱的价值写给数组,最后把它赋给arr[j]。因为减法运算可能会造成浮点不准确,所以要每次循环都添加toFixed保留两位小数。
4.最后把判断return的语句添上,要注意第二个判断必须是!=,不能用!==,有可能remainder为0.00的情况,而这种情况也不能用parseInt去取正。
let checkCashRegister = (price, cash, cid) => { let remainder = cash - price,arr = [],j = 0,total = 0 ,value = remainder; const array = [0.01,0.05,0.1,0.25,1,5,10,20,100]; for(let i = cid.length - 1;i >= 0;i--){ total += cid[i][1]; if(remainder > array[i] && cid[i][1] > 0){ let c = parseInt(remainder / array[i]); if(remainder > cid[i][1]){ remainder -= cid[i][1]; }else{ remainder -= c * array[i]; cid[i][1] = c * array[i]; } remainder = remainder.toFixed(2); arr[j++] = cid[i]; } } if(total === value){ return "Closed"; }else if(total < value || remainder != 0){ return "Insufficient Funds"; } return arr; }; console.log(checkCashRegister(19.50, 20.00, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.10], ["QUARTER", 4.25], ["ONE", 90.00], ["FIVE", 55.00], ["TEN", 20.00], ["TWENTY", 60.00], ["ONE HUNDRED", 100.00]])); //[["QUARTER", 0.5]]
如果有不明白的地方请留言,如果有更好更简便更优化的方法请留言,谢谢。
更多内容请访问我的个人博客:Bblog
最新文章
- allegro - 层叠相关参数
- 对IEnumerable<;T>;和IQueryable<;T>;的一点见解
- 更改动软代码生成器模板 验证Model数据合法性
- 【Hadoop】Hive HSQ 使用 &;&; 自定义HQL函数
- C# DateTime类型和时间戳 互相转换
- 20160130.CCPP体系详解(0009天)
- 20160512关于mac安装caffe的记录
- WPF事件,路由事件
- 抛弃vue-resource拥抱axios
- DAY2-MySQL专业安装
- .NET Core下的Spring Cloud&mdash;&mdash;前言和概述
- python4 分支结构,循环结构 for循环
- python中class的序列化和反序列化
- 完整的一次 HTTP 请求响应过程(二)
- MySQL数据库导入错误:ERROR 1064 (42000) 和 ERROR at line xx: Unknown command &#39;\Z&#39;.
- IIS下使用 HTTP/2
- PS添加透明立体水印
- c# Type.InvokeMember用法
- Oracle官方文档
- 大道至简的C语言内存管理