12 месяцев
Решите уравнение в натуральных числах 28n + 30 k + 31 m = 365
Примечание. Используйте вложенный цикл for. В первую очередь запишите решение с наименьшим значением n.
n =
k =
m =
или
n =
k =
m =
Python
Решите уравнение в натуральных числах Python
Можно так


На брутфорс смахивает 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
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
Игорь Петрик
А других решений нет ?
Если 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))
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))
Роман Гамазин
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)
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)
Саша Сергеев
Утяжеляет код наличие совершенно ненужного третьего цикла.
Юра Кузьмичёв
Извините, я писал текст в ворде он как-то странно копируется.... Также фраза "я сам математик" не является никаким аргументом, а лишь апелляцией к какому-то "ВЫСШЕМУ" авторитету. Я примерно изложил, является ли 0 натур или нет.
Похожие вопросы
- Гладкие числа. Python
- Решите уравнение в Python
- Дружественные числа Python
- Решите с помощью языка программирования Python!
- Заполнить двухмерный список случайными числами python
- Помогите пожалуйста решить задачу "Ход конём" в Python.
- Помогите решить задачу в яндекс-практикуме Python
- Помогите решить задачу в яндекс-практикуме Python
- Заполните матрицу, содержащую N строк и M столбцов, натуральными числами змейкой, как на рисунке:
- Есть ли способ вывести случайное число не используя модуль random в python