не знаю, как решить это упражнение - PullRequest
0 голосов
/ 16 апреля 2019

Я должен рассчитать обменный курс в законном платежном поручении для точной суммы. Точные бумажные деньги и монеты должны быть вставлены в массив. Я застрял на этом шаге и не знаю, как его решить.

function countChange(amount) {
    const currency = [500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01];
    const change = [];

    for (let i = 0; i < currency.length; i++) {
        const value = currency[i];
        if (value <= amount) {
            change.push(value)
        }

    }
    return change;

};


console.log(countChange(500.26));

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Ниже приведен простой пример.

Просто выполните итерацию для каждого размера чеканки, просто разделите текущую общую сумму на каждый размер чеканки, если есть чеканка, затем вставьте ее в массив.

function countChange(amount) {
    const currency = [500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01];
    const change = [];
    for (let i = 0; i < currency.length; i++) {
        const coinsize = currency[i];
        //how many coins?
        const coins = Math.trunc(amount / coinsize);
        //remove these from total
        amount -= coinsize * coins;
        //fix rounding problems.
        amount = Math.round(amount * 100) / 100;
        //add to our result
        if (coins > 0)
        {
            change.push({
                coinsize,
                coins
            });
        }
    }
    return change;
};


console.log(countChange(500.26));
0 голосов
/ 16 апреля 2019

Я думаю, это то, что вы ожидаете:

function countChange(amount) {
    const currency = [500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01];
    const change = [];
    var changed = 0;
    while(changed < amount){
        for(var i = 0; i < currency.length; i++){
            if(amount-currency[i] >= 0){
                change.push(currency[i]);
                changed+=currency[i];
                amount-=currency[i];
            }
        }
    }
    return change;

}

console.log(countChange(500.26))
...