Sobes.tech
Middle+

Կան ավտոմատ դրամապանակներ նշված նոմինալներով: Օգտագործողը ընտրում է այն գումարը, որը ցանկանում է ստանալ: Ավտոմատ դրամապանակը պետք է վերադարձնի օգտագործողի մուտքագրված գումարը նվազագույն քանակությամբ բանկնոտներով: Գրեք ավտոմատ դրամապանակի ֆունկցիան: function atm(notes, sum) { } // atm([1, 5, 50, 100], 362) => [100,100,100,50, 5, 5, 1, 1]

sobes.tech AI

Պատասխան 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). Если нет, то возможны случаи, когда сумма не может быть выдана.