首页 > 代码库 > FCC 高级算法题 收银机找零钱
FCC 高级算法题 收银机找零钱
Exact Change
设计一个收银程序 checkCashRegister()
,其把购买价格(price
)作为第一个参数 , 付款金额 (cash
)作为第二个参数, 和收银机中零钱 (cid
) 作为第三个参数.
cid
是一个二维数组,存着当前可用的找零.
当收银机中的钱不够找零时返回字符串 "Insufficient Funds"
. 如果正好则返回字符串 "Closed"
.
否则, 返回应找回的零钱列表,且由大到小存在二维数组中.
Global Object
代码:
1 function checkCashRegister(price, cash, cid) { 2 var obj = {}; 3 var num = 0; 4 var odd = cash - price; 5 var arr = []; 6 var newArr = []; 7 var a = 0; 8 9 for (var i = 0; i < cid.length; i++) { 10 //把这个二维数组的第一项和第二项分别变为新建对象的属性和属性值 11 var s = cid[i][0]; 12 obj[s] = cid[i][1]; 13 //累加得出收银机零钱的总和 14 num += cid[i][1]; 15 } 16 if (odd === num) { 17 //如果收银机中的钱num和需要找的钱odd相等,返回字符串“Closed” 18 return "Closed"; 19 } 20 for (var j = 0; j < Object.keys(obj).length; j++) { 21 //遍历对象属性 22 var name = Object.keys(obj)[8 - j]; 23 //新建一个关于美元数额的数组 24 var figure = [100, 20, 10, 5, 1, 0.25, 0.1, 0.05, 0.01]; 25 26 fi1(); 27 28 if (a > 0) { 29 arr.push([name, figure[j] * a]); 30 a = 0; 31 } 32 } 33 function fi1() { 34 if (odd >= figure[j] && obj[name] >= figure[j]) { 35 //判断odd,如果大于某一面额的钞票且在收音机中有该面值的钞票 36 odd = odd - figure[j]; 37 //js的精度问题,2=1.999999,所以要用Math.round()来四舍五入 38 odd = Math.round(odd * 10000) / 10000; 39 obj[name] = obj[name] - figure[j]; 40 obj[name] = Math.round(obj[name]); 41 //这个a是用来判断是否有多张统一面值的钞票,这个在上面的if语句中用来给空数组arr添加元素 42 a += 1; 43 fi1(); 44 } 45 } 46 if (odd === 0) { 47 //如果可以找零并且有剩余,就返回一个应找回的零钱列表 48 return arr; 49 } else if (odd > 0) { 50 //如果收音机中的钱不够找零时,返回字符串"Insufficient Funds" 51 return "Insufficient Funds"; 52 } 53 } 54 55 checkCashRegister(19.50, 20.00, [ 56 ["PENNY", 0.50], 57 ["NICKEL", 0], 58 ["DIME", 0], 59 ["QUARTER", 0], 60 ["ONE", 0], 61 ["FIVE", 0], 62 ["TEN", 0], 63 ["TWENTY", 0], 64 ["ONE HUNDRED", 0] 65 ]);
FCC 高级算法题 收银机找零钱
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。