В магазине продается печенье в ящиках по 15 кг,
17 кг, 21 кг. Как купить ровно 185 кг печеньи, не
вскрывая ящики? Сколькими способами можно это
сделать? PYTHON python
Ответы
def find_combinations(total_weight: int, box_weights: list):
result = []
for x in range(total_weight // box_weights[0] + 1):
for y in range(total_weight // box_weights[1] + 1):
for z in range(total_weight // box_weights[2] + 1):
if box_weights[0] * x + box_weights[1] * y + box_weights[2] * z == total_weight:
result.append((x, y, z))
return result
box_weights = [15, 17, 21]
total_weight = 185
combinations = find_combinations(total_weight, box_weights)
print(f'Всего {len(combinations)} способов купить {total_weight} кг печенья:')
for combination in combinations:
print(f'{box_weights[0]} кг x {combination[0]}, {box_weights[1]} кг x {combination[1]}, {box_weights[2]} кг x {combination[2]}')
Можно сделать по другому и проще используя библиотеку itertools
from itertools import product
box_weights = [15, 17, 21]
total_weight = 185
combinations = [combination for combination in product(range(total_weight // box_weights[0] + 1), range(total_weight // box_weights[1] + 1), range(total_weight // box_weights[2] + 1)) if sum([box_weights[i] * combination[i] for i in range(len(box_weights))]) == total_weight]
print(f'Всего {len(combinations)} способов купить {total_weight} кг печенья:')
for combination in combinations:
print(f'{box_weights[0]} кг x {combination[0]}, {box_weights[1]} кг x {combination[1]}, {box_weights[2]} кг x {combination[2]}')
![](https://st.uroker.com/files/feb/feb3f8a890695131f1765d72b1838b7c.png)
![](https://st.uroker.com/files/6b3/6b353c5ba7b80cc27896e03d54c93fb0.png)