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