Проект Эйлера

Проект Эйлера. Задача 31 «Суммы монет»

Условие:

В Англии валютой являются фунты стерлингов £ и пенсы p, и в обращении есть восемь монет:

1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) и £2 (200p).

£2 возможно составить следующим образом:

1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p

Сколькими разными способами можно составить £2, используя любое количество монет?

Решение:

# Порядок номинала монет не имеет значения, но номинал должен быть уникальным

def compute():
    TOTAL = 200
    ways = [1] + [0] * TOTAL
    for coin in [1, 2, 5, 10, 20, 50, 100, 200]:
        for i in range(len(ways) - coin):
       ways[i + coin] += ways[i]
    return str(ways[-1])


if __name__ == "__main__":
    print(compute())

Ruslan

Recent Posts

Сборка мусора в Python: ключевые концепции и механизмы

Управление памятью - важный, но часто упускаемый из виду аспект программирования. При неправильном подходе оно…

6 дней ago

Круговой импорт в Python и как его избежать

Как возникает круговой импорт? Эта ошибка импорта обычно возникает, когда два или более модуля, зависящих…

2 недели ago

Библиотека tqdm: визуализация прогресса выполнения скриптов Python

Вы когда-нибудь оказывались в ситуации, когда скрипт на Python выполняется очень долго и вы задаетесь…

3 недели ago

Символы новой строки в Python

В этом руководстве мы разберем все, что нужно знать о символах перехода на новую строку…

2 месяца ago

if __name__ == «__main__» в Python: полное объяснение

Блок if __name__ == "__main__" в Python позволяет определить код, который будет выполняться только при…

2 месяца ago

Как писать модульные тесты для методов экземпляра в Python

Давайте разберем, как настроить модульные тесты для экземпляров классов. Мы напишем тесты для проверки функциональности…

4 месяца ago