Sobes.tech
Middle+
25

Белгілі номиналдағы банкноттар бар банкомат бар. Пайдаланушы алғысы келген ақша сомасын таңдайды. Банкомат енгізілген соманы ең аз банкнот санымен беруі керек. Банкомат функциясын жазыңыз. function atm(notes, sum) { } // atm([1, 5, 50, 100], 362) => [100,100,100,50, 5, 5, 1, 1]

Сұралған компаниялар
Morizo

AI-дан жауап

sobes.tech AI

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

function atm(notes, sum) {
  notes.sort((a, b) => b - a); // сортируем по убыванию
  const result = [];
  for (const note of notes) {
    while (sum >= note) {
      sum -= note;
      result.push(note);
    }
  }
  if (sum !== 0) {
    // если сумма не может быть выдана заданными номиналами
    return [];
  }
  return result;
}

// Пример
console.log(atm([1, 5, 50, 100], 362));
// Вывод: [100, 100, 100, 50, 5, 5, 1, 1]

Этот алгоритм работает корректно, если номиналы банкнот позволяют выдать любую сумму (например, есть банкнота 1). Если нет, то возможны случаи, когда сумма не может быть выдана.