Интересная задача на python

Используя монеты достоинством в 2, 3 и 5 копеек представить сумму 99 копеек, затратив ровно 22 монеты.


Ответы (3 шт):

Автор решения: Zhihar

очень интересная задача, особенно на питоне

2x + 3y + 5z = 99
x + y + z = 22

откуда

y + 3z = 55

z = 18 + (1-y) / 3

первое решение при y = 1:

y = 1 z = 18 x = 3

Так, решение есть, а питона пока все еще нет :(((

Ну ладно, попробуем дальше

очевидно, что y = 3n + 1, где n = [0..7]

тогда:

z = 18 - n
y = 3n + 1
x = 3 - 2n
n = [0..7]

И опять нет питона :(

Идем дальше:

x = 3 - 2n дает ограничение на n = [0..1]

Что даёт нам указанное выше решение:

x = 3 y = 1 z = 18

и еще одно

x = 1 y = 4 z = 17

Вот теперь мы можем написать программу на Питоне!!!

print('x = 3 y = 1 z = 18')
print('x = 1 y = 4 z = 17')
→ Ссылка
Автор решения: Danis

решение перебором:

for i0 in range(23):
    for i1 in range(23):
        for i2 in range(23):
            if i0 + i1 + i2 == 22:
                if i0 * 2 + i1 * 3 + i2 * 5 == 99:
                    print(i0, i1, i2)
            elif i0 + i1 + i2 > 22:break
→ Ссылка
Автор решения: Zhihar

К ответу @Danis, можно немного поизвращаться с питоном:

сложность O(n^2)

for x in range(23):
    for y in range(23 - x):
        z = 22 - x - y
        if x * 2 + y * 3 + z * 5 == 99:
            print(x, y, z)

Можно сделать чуть-чуть побыстрее, чтобы не вычислять z когда не надо:

for x in range(23):
    for y in range(23 - x):
        if x * 3 + y * 2 == 11:
            z = 22 - x - y
            print(x, y, z)
→ Ссылка