не знаю, как решить это упражнение

#javascript #arrays #function #for-loop

#javascript #массивы #функция #для цикла

Вопрос:

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

 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));
 

Комментарии:

1. Какой ожидаемый результат для 500.26

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

3. Это упражнение, которое почти каждый здесь должен решить хотя бы один раз в процессе обучения. Как бы вы (иначе не ваша программа ) продолжили подсчитывать валюту, которую нужно отдать?

Ответ №1:

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

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

 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)); 

Ответ №2:

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

 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)) 

Комментарии:

1. Но это неправильный результат … который добавляет до 500.25, а не 500.26

2. Никаких проблем, другой ответ лучше, чем