Решить задачу на javascript
Помогите разобрать задачу: У Аллена много денег, а именно, на счету в банке у него ? долларов. По соображениям безопасности он хочет снять всю сумму наличными, мы не будет здесь описывать эти соображения. Номиналы долларовых купюр равны 1, 5, 10, 20, 100. Какое минимальное число купюр должен получить Аллен после того, как снимет все деньги?
Входные данные Первая и единственная строка содержит одно целое число ? (1≤?≤109). (125)(1000000000)(43) Выходные данные Выведите минимальное число купюр, которые должен получить Аллен.(3)(10000000)(5) P.S числа в скобках на входных данных и выходных - это числа которые подставляются в N и соответсвенно числа которые должны быть на выходе(минимальное количество купюр)
Я предполагала 1)сначала сравнить n, 100 <= n <= 10000000 и если n < 100;
2) чтобы узнать количество сотен разделить n / 100; десятков - на 10; 3) а дальше не знаю как заставить компьютер считать что ему нужно подставить 20 или 10 или 5 напимер..
Ответы (2 шт):
Делите N нацело на 100, получите нужное число таких купюр. Остаток от деления делите на 20, и так далее.
const data = [125, 1000000000, 43];
function test(n) {
const nom = [100, 20, 10, 5, 1];
return nom.reduce((acc,v) => (acc += ~~(n/v),n%=v, acc), 0);
}
data.forEach(n => console.log(n, test(n)));
Могу предложить простое решение без reduce
const banknotes = [1, 5, 10, 20, 100]
const convert = (N) => {
let min = 0
for (let i = banknotes.length - 1; i >= 0; --i) {
min += Math.floor(N / banknotes[i])
N -= Math.floor(N / banknotes[i]) * banknotes[i]
}
return min
}