Python

Решите уравнение в натуральных числах Python

12 месяцев
Решите уравнение в натуральных числах 28n + 30 k + 31 m = 365

Примечание. Используйте вложенный цикл for. В первую очередь запишите решение с наименьшим значением n.
n =
k =
m =
или
n =
k =
m =
Можно так
ВШ
Виталий Шмаков
2 387
Лучший ответ
На брутфорс смахивает xD

def cmp(n, k, m):
        r = 28*n + 30*k + 31*m
        #print(f'28*{n}+30*{k}+31*{m}={r}')
        return 0 if r == 365 else 1 if r > 365 else -1

n = m = k = f0 = f1 = 0
for n in range(365 % 28 + 1):
        for k in range(365 % 30 + 1):
                for m in range(365 % 31 + 1):
                        c = cmp(n, k, m)
                        if c == 0:
                                print(f'n = {n}\nk = {k}\nm = {m}\n')
                                f0 = 1
                                break
                        elif c == 1:
                                break
                if f0: break
        for m in range(365 % 31 + 1):
                for k in range(365 % 30 + 1):
                        c = cmp(n, k, m)
                        if c == 0:
                                print(f'n = {n}\nm = {m}\nk = {k}\n')
                                f1 = 1
                                break
                        elif c == 1:
                                break
                if f1: break
        if f0 and f1: break

==============================
n = 1
k = 4
m = 7

n = 1
m = 7
k = 4
Роман Ширгазин
Роман Ширгазин
89 087
Игорь Петрик А других решений нет ?
Если 0 считается натуральным числом:

for n in range(0, 366, 28):
~~for k in range(0, 366 - n, 30):
~~~~if (365 - n - k) % 31 == 0: print('n = {}\nk = {}\nm = {}'.format(n // 28, k // 30, (365 - n - k) // 31))

Без нулей:

for n in range(28, 366, 28):
~~for k in range(30, 366 - n, 30):
~~~~if (365 - n - k) % 31 == 0: print('n = {}\nk = {}\nm = {}'.format(n // 28, k // 30, (365 - n - k) // 31))
СС
Саша Сергеев
59 562
Роман Гамазин 0 не считают натуральным числом, это моветон.
У меня два решения для n,k,m:
1 4 7 и 2 1 9. Они сразу выдаются, а с программой здесь вообще нечего мудрить, так как максимальное количество месяцев не превышает тринадцати, так что перебор получается относительно небольшим и ни в каких дурацких оптимизациях, только удлинняющих и утяжеляющих код, не нуждается !
r=range(1,14)
for n in r:
~for k in r:
~~for m in r:
~~~if 28*n+30*k+31*m==365: print(n,k,m)
Федор Поздеев
Федор Поздеев
28 648
Саша Сергеев Утяжеляет код наличие совершенно ненужного третьего цикла.
Юра Кузьмичёв Извините, я писал текст в ворде он как-то странно копируется.... Также фраза "я сам математик" не является никаким аргументом, а лишь апелляцией к какому-то "ВЫСШЕМУ" авторитету. Я примерно изложил, является ли 0 натур или нет.