Задача № 98
Для какого наименьшего целого неотрицательного числа \( А \) выражение
\[ (x + 2y < A) \lor (y > x) \lor (x > 60) \]
тождественно истинно, т.е. принимает значение 1 при любых целых неотрицательных \( x \) и \( y \)?

Решение
В таких задачах встречаются хитрые сюжеты, поэтому полезно уметь решать их не только с помощью кода. Давайте начнём с графического способа.
Решим с помощью графика
Между скобками логическое ИЛИ. Чтобы всё выражение было истинно, достаточно истинности хотя бы одной скобки. Рассмотрим их отдельно.
\( (x + 2y < A) \) \(\lor\) \((y > x)\) \(\lor\) \( (x > 60) \)
С помощью Python
Будем подбирать значение параметра \(A\) и проверять его для всех значений \(x\) и \(y\).
Поскольку проверить на всех возможных значениях \(x\) и \(y\) задача для компьютера невыполнимая, определим границы.
Предел \(x\) и \(y\) можно выбрать произвольно, но чем он больше — тем дольше будет работать программа.
Заметим, что при \( \nobreak {x > 60} \) выражение истинно. С небольшим запасом будем проверять до сотни.
# определим функцию, которая проверяет значение A
def check(A):
# проверяем для x от нуля до 100
for x in range(100):
# и также для y от нуля до 100
for y in range(100):
# если получается ложное значение выражения — такое A не подходит
if ((x + 2 * y < A) or (y > x) or (x > 60)) == 0:
# вызвращаем ложь
return False
# если ни разу не получалось ложное значение — возвращаем истину
return True
# минимальное значение A по условию — целое неотрицательное
A = 0
# пока не найдём подходящее значение — увеличиваем A
while not check(A):
A += 1
# когда нашли подходящее — выводим ответ
print(A)