【FCC】Exact Change 收银程序
生活随笔
收集整理的這篇文章主要介紹了
【FCC】Exact Change 收银程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
設計一個收銀程序 checkCashRegister() ,其把購買價格(price)作為第一個參數 , 付款金額 (cash)作為第二個參數, 和收銀機中零錢 (cid) 作為第三個參數.
cid 是一個二維數組,存著當前可用的找零.
當收銀機中的錢不夠找零時返回字符串 "Insufficient Funds". 如果正好則返回字符串 "Closed".
否則, 返回應找回的零錢列表,且由大到小存在二維數組中.
代碼:
<script type="text/javascript">
function checkCashRegister(price, cash, cid) {
var change;
var payback = {
'PENNY': 1,
'NICKEL': 5,
'DIME': 10,
'QUARTER': 25,
'ONE': 100,
'FIVE': 500,
'TEN': 1000,
'TWENTY': 2000,
'ONE HUNDRED': 10000
};
//找零
change = (cash - price) * 100;
console.log('需要找零:' + change);
var keys = Object.keys(payback);
var i = keys.length - 1;
var cidObj = {};
var objCopy = {};
for (i in cid) {
cidObj[cid[i][0]] = cid[i][1] * 100;
//復制一份,不能直接使用賦值語句
objCopy[cid[i][0]] = cid[i][1] * 100;
}
console.log(cidObj);
//遍歷收銀機中的零錢和最小零錢單位
while (i >= 0) {
while (payback[keys[i]] <= change && cidObj[keys[i]]) {
change -= payback[keys[i]]; //如果要找零的錢大于最小找零單位且其中有錢,從其中找零
cidObj[keys[i]] -= payback[keys[i]]; //找零后從零錢盒中減去已找零費用
}
i--;
}
console.log(cidObj);
var result = [];
//如果遍歷之后change不為0,說明零錢不夠找不開
if (change) {
return "Insufficient Funds";
}
for (i in cidObj) {
if (cidObj[i]) {
break;
} else if (i === keys[keys.length - 1]) {
return "Closed";
}
}
for (i in objCopy) {
if (objCopy[i] !== cidObj[i]) {
result.unshift([i, (objCopy[i] - cidObj[i]) / 100]);
}
}
return result;
}
</script>
參考資料:
https://www.jianshu.com/p/6b76d60d8f49
總結
以上是生活随笔為你收集整理的【FCC】Exact Change 收银程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【FCC】Symmetric Diffe
- 下一篇: 【FCC】Inventory Updat