首页 > 解决方案 > 如何进行这种更改方法,以便获得该给定金额的账单

问题描述

我有这个任务,我必须将给定数量的钱分成账单。我看不出我做错了什么,因此寻求一些指导。

export function change(amount) {

    var bills = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000];
    var result = [];

    while (amount > 0) {
        for (var i = 0; i < bills.length; i++) {
            if (amount >= bills[i]) {
                amount -= bills[i];
                result.push(bills[i]);
            }
        }
    }
    return result.length;
}

标签: javascript

解决方案


您的代码在检查较大的钞票之前先检查较小的钞票,这显然是错误的:您希望在使用 1 美元钞票之前拥有尽可能多的 1000 美元钞票。因此,您可以反转您的 bills 数组,或者只是对其进行排序以使其反转:

function change(amount) {
    const bills = [1000, 500, 200, 100, 50, 20, 10, 5, 2, 1];
    // alternatively, to sort it
    // bills.sort((a, b) => b - a);
    const result = [];
    for (const bill of bills) {
        const billCount = Math.floor(amount / bill);
        amount = amount % bill;
        result.push(...new Array(billCount).fill(bill));
    }
    return result;
}

推荐阅读