我试图创建一个创建表格的函数来显示所需的每种货币的变化量,例如。 $ 50; 1 $ 20; 2 50cents; 1等等。这个功能我只需要返还到期金额,以及每种货币的数量,该表格将显示在另一个函数中。
最好的方法是什么?
到期= 40美元 values = new Array(100,50,20,10,0.5,0.2,0.1);
function calculateChange(due,values)
答案 0 :(得分:0)
算法非常简单:您有一系列钞票和硬币面额,按降序排序。看看那个顺序的面额,看看你必须给出多少硬币。相应地减少剩余的变化。
这是一个实现,它返回一个字典,其字符是面额,其值表示该变更中包含了多少个该项目。 ehose值为零的项目不包含在字典中:
function change(amount, coins) {
var res = {};
for (var i = 0; amount > 0 && i < coins.length; i++) {
var value = coins[i];
if (value <= amount) {
res[value] = Math.floor(amount / value);
amount -= value * res[value];
}
}
return res;
}
例如:
c = change(431, [5000, 2000, 1000, 500, 200, 50, 20, 10, 5, 2, 1]);
// c == { 1: 1, 10: 1, 20: 1, 200: 2 }
注意硬币面额是如何以分数给出的。如果您使用更自然的美元表示,您将获得浮点数,您可能会遇到四舍五入的问题。 (Javascript中的数字是浮点数,但如果它们代表某个范围内的整数,这应该足以解决您的问题,那么它们就是准确的。)