Как мне генерировать дополнения для данной суммы, используя Python? - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь сгенерировать возможные добавления для любого числа от 0 до 30. Количество добавлений = 10, нижний предел добавления = 0 и верхний предел добавления = 3.

Например, длячисло 30, адденды могут быть 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 = 30.

Для 12 адденды могут быть, 3 + 3 + 1 + 2 +1 + 1 + 0 + 0 + 1 = 12 или 3 + 3 + 3 + 3 + 3 + 0 + 0 + 0 + 0 = 12 или что-либо в пределах указанного предела. Но количество добавлений всегда должно быть 10.

Как я могу сделать это в Python?

Заранее спасибо. Самуэль Дюраивель

1 Ответ

0 голосов
/ 04 октября 2019

Если вы хотите сгенерировать их все, то, поскольку вы работаете с небольшими числами, вы можете просто сгенерировать все 1 048 576 способов выбора 10 элементов из [0, 1, 2, 3] и проверить, какие из них суммируют с тем, что вы хотите

from itertools import product

def addend_all(n):
    for combination in product(range(4), repeat=10):
        if sum(combination) == n:
            yield combination

for i in range(31):
    print(list(addend_all(i)))
...