我不是在问我如何用另一种方式编写这个程序。我在程序中犯了错误,所以问题不重复。我的问题是程序中的错误或缺失是什么。我只想学习并删除它。
我的程序在某些情况下会出错,包括0.1,0.05或0.01的倍数,但对于其他数字,它运行正常。例如,它为此输入返回的资金不足(价格(3.3),现金(10.0))而不是 [五,五],[一,1],[四分之一,0.5],[一角,0.2] 。 我认为算法是正确的,但我看不出有什么问题。
function checkCashRegister(price, cash, cid) {
var left = cash - price;
var toplam = 0;
var paralar = [0.01, 0.05, 0.10, 0.25, 1.00, 5.00, 10.00, 20.00, 100.00];
var artan = [];
for (var i = 0; i < cid.length; i++) {
toplam += cid[i][1];
}
if (left > toplam) {
return "Insufficient Funds";
} else if (left === toplam) {
return "Closed";
}
var t = paralar.length - 1;
for (var t = paralar.length - 1; t >= 0; t--) {
if (left >= paralar[t]) {
var sayac = 0;
while (left >= paralar[t] && cid[t][1] > 0) {
left -= paralar[t];
sayac += paralar[t];
cid[t][1] -= paralar[t];
}
var bos = [cid[t][0], sayac];
artan.push(bos);
}
}
if (left > 0) {
return "Insufficient Funds";
}
return artan;
}
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]
]);
这个例子回报资金不足。但如果我将3.26更改为3.25则返回正确的字符串。