FCC(ES6写法) Exact Change
设计一个收银程序 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
FCC(ES6写法) Exact Change的更多相关文章
- FCC高级编程篇之Exact Change
Exact Change Design a cash register drawer function checkCashRegister() that accepts purchase price ...
- 【转】React Native中ES5 ES6写法对照
很多React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教程和例子都是 ...
- React,React Native中的es5和es6写法对照
es6用在React中的写法总结: 在es6还没有完全支持到浏览器的阶段里,已经有很多技术人员开始用es6的写法来超前编程了,因为有转义es6语法的工具帮助下,大家才可大量使用.解析看看es6写法用在 ...
- Exact Change(背包HDU2753)
Exact Change Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 6-最基础的服务-es6写法
创建server.js 'use strict'; //http模块 var http = require('http'); //封装的方法 var handlers = require('./han ...
- react-native ES5与ES6写法对照表
转载链接:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/react-native-es5-and-es6-writing-tabl ...
- JavaScript get set方法 ES5/ES6写法
网上鲜有get和set的方法的实例,在这边再mark一下. get和set我个人理解本身只是一个语法糖,它定义的属性相当于“存储器属性” 为内部属性提供了一个方便习惯的读/写方式 ES5写法 func ...
- FCC(ES6写法) Make a Person
用下面给定的方法构造一个对象. 方法有 getFirstName(), getLastName(), getFullName(), setFirstName(first), setLastName(l ...
- FCC(ES6写法) No repeats please
把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数.连续重复只以单个字符为准. 例如, aab 应该返回 2 因为它总共有6中排列 (aab, aab, ab ...
随机推荐
- 收藏一个可以学习javascript prototype的链接
https://github.com/mqyqingfeng/Blog/issues/2
- 《Linux就该这么学》 - 必读的红帽系统与红帽linux认证自学手册
<Linux就该这么学> 本书作者刘遄从事于linux运维技术行业,较早时因兴趣的驱使接触到了Linux系统并开始学习. 已在2012年考下红帽工程师RHCE_6,今年又分别考下RHC ...
- 如何选择 Apache Tomcat 与 JDK 版本
Apache Tomcat Version
- 明确MangoDB在企业中应用
目录 1.MongoDB是什么? 2.为什么要用MongoDB? 3.主要特性 4.C/S服务模型 5.完善的命令行工具 6.几个shell实操 7.在Java中使用MongoDB 明确MongoDB ...
- PADS Router VX.2.3 设置光标的类型
操作系统:Windows 10 x64 工具:PADS Router VX.2.3 菜单:Tools > Options...(快捷键:Ctrl + <Enter>) 在Option ...
- python输入一行字符,判断不同字符数量
输入一行字符,判断不同字符的数量, 分别用for循环和while循环完成 for循环 运用了字符串方法, isupper()判断是否为大写字母 islower()判断是否为小写字母 isdigit() ...
- mysql主从不同步原理
mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负 ...
- es6 let 和 const
function test(){ let a = 1 for (let i =0;i<3;i++){ console.log(i) //1,2 } console.log(i) ...
- .net基础学java系列(五)慢性自杀 之 沉沦在IDE中
最近在慢学习IDEA,总是喜欢与Visual Studio! 其实,对于Visual Studio,它的官方(https://docs.microsoft.com/zh-cn/visualstudio ...
- SQL Server 分区表上建立ColumnStore Index 如何添加新分区方法与步骤
在生产环境中会遇到这样的场景,一个表随着时间的推移,越来越大,这个时候我们开始动手为这个表建立分区来改进查询性能. 但是表过大上百个G的时候,在数据仓库中,为了改进查询性能,我们可以添加在分区表的基础 ...