我试图解决Freecodecamp挑战:
设计一个收银抽屉功能checkCashRegister(),它接受购买价格作为第一个参数(价格),付款作为第二个参数(现金),以及现金抽屉(cid)作为第三个参数。
我几乎解决了它,问题是它没有减少,例如" Twenty"应尽可能多的次数。
checkCashRegister(3.26, 100.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]]) should return [["TWENTY", 60.00], ["TEN", 20.00], ["FIVE", 15.00], ["ONE", 1.00], ["QUARTER", 0.50], ["DIME", 0.20], ["PENNY", 0.04]].
它应该减去20美元三倍或60美元,它只减去一次。
它返回:
[["TWENTY", 20.00], ["TEN", 10.00], ["FIVE", 5.00], ["ONE", 61.00], ["QUARTER", 0.50], ["DIME", 0.20], ["PENNY", 0.04]]
60美元被添加到" ONE" ..
function checkCashRegister(price, cash, cid) {
var change = cash - price;
var changeArray = [];
var val = 0;
var n = [
{name:"PENNY",value:0.01},
{name:"NICKEL",value:0.05},
{name:"DIME",value:0.10},
{name:"QUARTER",value:0.25},
{name:"ONE",value:1.00},
{name:"FIVE",value:5.00},
{name:"TEN",value:10.00},
{name:"TWENTY",value:20.00},
{name:"ONE HUNDRED",value:100.00}
];
var den = n.reverse();
var register = cid.reduce(function(accumulator, next) {
return accumulator+next[1];
}, 0);
if(register === change) {
return "Closed";
}else if(register < change) {
return "Insufficient Funds";
}
else {
}
for(var i=0;i<cid.length;i++) {
val=0;
while(cid[i][1] >= 0 && change >= den[i].value) {
change -= den[i].value;
change = Math.round(change * 100) / 100;
cid[i][1] -= den[i].value;
val += den[i].value;
}
if(val !== 0) {
changeArray.push([den[i].name, Number(val.toFixed(2))]);
}
}
if(changeArray.length < 1 || change > 0) {
return "Insufficient Funds";
}
return changeArray;
}
&#13;
答案 0 :(得分:0)
while(cid[i][1] >= 0 && change >= den[i].value)
也许我错过了您的代码中的某些内容,但是cid[i][1]
和den[i].value
的顺序不是相反吗?另外,cid[i][1]
是否必须至少等于或等于den[i].value
?