Логотип YeaHub

Выдача суммы банкнотами (Cash Dispenser)

3

GoJavaJavaScriptPython

Жадные алгоритмы

Условие:
Реализуйте функцию, которая определяет, можно ли выдать запрошенную сумму заданным набором номиналов банкнот с учётом ограниченного количества банкнот каждого номинала, и если можно — возвращает состав выдачи (сколько банкнот каждого номинала использовано). Набор номиналов и их доступное количество передаются как конфигурация. Если собрать сумму из доступных банкнот невозможно (не хватает номиналов или банкнот), функция должна вернуть признак невозможности выдачи вместо набора банкнот.

Входные данные:

  • amount — запрошенная сумма, целое положительное число

  • bills — конфигурация доступных банкнот: список записей вида { value, count }, где value — номинал, count — сколько банкнот этого номинала доступно

Выходные данные: объект вида { success: true, breakdown: [{ value, count }, ...] } с составом выдачи (только номиналы с count > 0), либо { success: false, breakdown: null }, если сумму выдать нельзя

Ограничения:

  • 1 <= amount <= 10^7

  • Количество различных номиналов ≤ 20

  • count для каждого номинала в пределах 0 <= count <= 1000

  • Номиналы — положительные целые числа, без дублирующихся значений в списке

Пример:

Вход: amount = 130, bills = [{value: 100, count: 2}, {value: 50, count: 1}, {value: 10, count: 5}]
Выход: { success: true, breakdown: [{value: 100, count: 1}, {value: 10, count: 3}] }

Вход: amount = 45, bills = [{value: 100, count: 2}, {value: 50, count: 1}]
Выход: { success: false, breakdown: null }

Вход: amount = 0, bills = [{value: 10, count: 5}]
Выход: { success: true, breakdown: [] }
Loading...