Вступить в клуб →
сложнаяpythonРекурсия и динамическое программирование

min_coins: минимальное число монет на сумму, -1 если размен невозможен

Напишите функцию min_coins(coins: list[int], amount: int) -> int.

Вход. coins — список номиналов (все строго больше нуля, могут повторяться, список может быть пустым), amount — целое неотрицательное. Монет каждого номинала неограниченное количество.

Выход. Минимальное число монет, которыми набирается ровно amount. Если набрать невозможно — вернуть -1.

Поведение на краевых входах.

  • amount = 0 — вернуть 0 при любых номиналах, в том числе при пустом списке монет.
  • Пустой список coins и amount > 0 — вернуть -1.
  • Сумму нельзя набрать (например coins = [2], amount = 3) — вернуть -1.

Важно. Жадный выбор самого крупного номинала даёт неверный ответ на некоторых наборах: для coins = [1, 3, 4] и amount = 6 правильный ответ 2 (3 + 3), а не 3 (4 + 1 + 1).

заготовка решения

def min_coins(coins: list[int], amount: int) -> int:
    # ваш код
    pass

🔒 Проверка ответа — для участников клуба

  • Автотесты прямо в браузере
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела