Sobes.tech
Middle+

Hay un cajero automático con billetes de denominaciones específicas. El usuario selecciona la cantidad de dinero que desea recibir. El cajero automático debe entregar la cantidad ingresada por el usuario con la menor cantidad de billetes. Escriba la función del cajero automático. function atm(notes, sum) { } // atm([1, 5, 50, 100], 362) => [100,100,100,50, 5, 5, 1, 1]

sobes.tech AI

Respuesta de la IA

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

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