Тема 15. Алгебра логики – преобразование логических выражений

15.03 Неравенства

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела алгебра логики – преобразование логических выражений
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 21#26682Максимум баллов за задание: 1

Для какого наибольшего целого числа А формула

((x ≤ 9) → (x ⋅x ≤ A )) ∧((y⋅y ≤ A) → (y ≤ 9))

тождественно истинна (то есть принимает значение 1  при любых целых неотрицательных значениях переменных     x  и y  )?

Показать ответ и решение

Решение руками

Упростим выражение, раскрыв импликацию:

((x > 9)∨(x ⋅x ≤ A )) ∧((y⋅y > A)∨ (y ≤ 9))

Заметим, что выражение состоит из двух частей, соединенных конъюнкцией, это значит, выражение истинно только в том случае, если обе части выражения истины. Рассмотрим их по отдельности.

Правая часть

(x > 9)∨ (x ⋅x ≤ A)

состоит из двух выражений, соединенных дизъюнкцией, тогда, чтобы это выражение было истинно необходимо чтобы было истинно хотя бы одна часть. Известная часть дает ложь при x ≤ 9  , подставим в неизвестную часть x = 9  , получаем 81 ≤ A  .

Левая часть

(y ⋅y > A )∨ (y ≤ 9)

так же состоит из двух выражений, соединенных дизъюнкцией, тогда, чтобы это выражение было истинно необходимо чтобы было истинно хотя бы одна часть. Известная часть дает ложь при y > 9  , подставим в неизвестную часть y = 10  , получаем 100 > A  .

Так как необходимо, чтобы обе части давали истину и при этом A было максимальным, ответ A = 99  .

Идея решения:

Перебираем все возможные значения A  от 0  до 149  . Для каждого A  с помощью вложенных циклов for перебираем все неотрицательные значения x  и y  (в коде — от 0 до 299). Для каждой пары (x,y)  проверяем логическое выражение

(x ≤ 9 → x⋅x ≤ A)∧ (y⋅y ≤ A → y ≤ 9).

Если хотя бы для одной пары выражение ложно, данный A  исключаем. Если же для всех перебранных пар выражение истинно, A  считаем подходящим. Так как требуется наибольшее A  , сохраняем последнее подходящее значение.

# Функция проверки выражения для фиксированного A, x и y
def f(A, x, y):
    return ((x <= 9) <= (x * x <= A)) and ((y * y <= A) <= (y <= 9))

# Переменная для хранения наибольшего подходящего A
ma = 0

# Перебор всех возможных значений A
for A in range(150):
    # Считаем, что A подходит, пока не доказано обратное
    flag = True

    # Перебираем все возможные x
    for x in range(300):
        # Перебираем все возможные y
        for y in range(300):
            # Если условие не выполняется — A не подходит
            if not f(A, x, y):
                flag = False
                break

    # Если A подошёл — сохраняем его
    if flag:
        ma = A

# Выводим наибольший подходящий A
print(ma)

Ответ: 99

Ошибка.
Попробуйте повторить позже

Задача 22#29023Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

((x ≤ 9) → (x⋅x ≤ A))∧ ((y ⋅y ≤ A ) → (y ≤ 10))

тождественно истинно (т.е. принимает значение 1  при любых неотрицательных целых значениях переменных  x  и y  )?

Показать ответ и решение

Решение руками

Упростим выражение, раскрыв импликацию:

((x > 9)∨ (x⋅x ≤ A))∧ ((y ⋅y > A )∨ (y ≤ 10))

Заметим, что выражение состоит из двух частей, соединенных конъюнкцией, это значит, выражение истинно только в том случае, если обе части выражения истины. Рассмотрим их по отдельности.

Правая часть

(x > 9)∨ (x ⋅x ≤ A)

состоит из двух выражений, соединенных дизъюнкцией, тогда, чтобы это выражение было истинно необходимо чтобы было истинно хотя бы одна часть. Известная часть дает ложь при x ≤ 9  , подставим в неизвестную часть x = 9  , получаем 81 ≤ A  .

Левая часть

(y⋅y > A)∨ (y ≤ 10)

так же состоит из двух выражений, соединенных дизъюнкцией, тогда, чтобы это выражение было истинно необходимо чтобы было истинно хотя бы одна часть. Известная часть дает ложь при y > 10  , подставим в неизвестную часть  y = 11  , получаем 121 > A  .

Так как необходимо, чтобы обе части давали истину и при этом A было максимальным, ответ A = 120  .

Идея решения:

Перебираем все возможные значения A  в заданном диапазоне (в коде — от 300 вниз до 0, чтобы сразу найти наибольшее подходящее значение). Для каждого A  с помощью вложенных циклов for перебираем все неотрицательные значения x  и y  (от 0 до 299). Для каждой пары (x,y)  проверяем логическое выражение

(x ≤ 9 → x ⋅x ≤ A )∧ (y ⋅y ≤ A → y ≤ 10).

Если хотя бы для одной пары выражение ложно, данный A  исключаем. Если же для всех перебранных пар выражение истинно, данный A  подходит. Так как требуется наибольшее A  , перебор идёт в обратном порядке, и первый подходящий A  будет ответом.

# Функция проверки выражения для фиксированного A, x и y
def f(x, y, a):
    return ((x <= 9) <= (x * x <= a)) and ((y * y <= a) <= (y <= 10))

# Перебор A от 300 до 0 для поиска наибольшего подходящего
for a in range(300, -1, -1):
    # Флаг: 0 - условие не выполнилось ни разу,
    1 - условие хотя бы раз не выполнялось
    fl = 0

    # Перебор x
    for x in range(300):
        # Перебор y
        for y in range(300):
            # Если выражение не выполняется, ставим флаг и выходим из цикла
            if not f(x, y, a):
                fl = 1
                break
        if fl:
            break

    # Если условие не нарушилось ни разу для всех x и y — A подходит
    if not fl:
        print(a)  # выводим наибольшее подходящее A
        break

Ответ: 120

Ошибка.
Попробуйте повторить позже

Задача 23#29684Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

(x + 3y > A )∨(x < 18)∨(y < 33)

тождественно истинно при любых целых неотрицательных x  и y?

Показать ответ и решение

Решение 1 (руками)

Чтобы дизъюнкция была истинной при любом неотрицательном целом значении x  и y  рассмотрим случай, когда (x < 18) = 0,  (y < 33) = 0  и (x + 3y > A ) = 1.

Это эквивалентно следующей системе:

(|      x  A
||{ y > − 3 +-3,
  x ≥ 18,
|||(
  y ≥ 33

Самое сильное ограничение для A  в системе будет при наименьших x  и y,  т. е. при 18  и 33  соответственно.

Подставим: 33 > − 138+ A3-,  откуда A < 117.  Наибольшее значение A = 116.

Идея решения:

Перебираем значения A  в возрастающем порядке (в коде — от 1  до 199  ). Для каждого A  проверяем все пары целых неотрицательных x,y  (в коде — от 1  до 199  ). Для каждой пары проверяем выполнение выражения

(x + 3y > A) ∨(x < 18)∨(y < 33).

Если найдётся хотя бы одна пара (x,y)  , для которой выражение ложно, то данный A  не подходит. Если же для всех перебранных пар выражение истинно, то этот A  подходит. Так как требуется найти наибольшее подходящее значение A  , достаточно пройти все значения, а в переменной ans хранить последний найденный вариант.

Решение программой:

# Функция проверки логического выражения
def f(x, y, A):
    return (x + 3*y > A) or (x < 18) or (y < 33)

# Перебор значений A
for A in range(1, 200):
    flag = True  # флаг, что A подходит

    # Перебор значений x
    for x in range(1, 200):
        # Перебор значений y
        for y in range(1, 200):
            # Если выражение не выполняется для какой-то пары
            if not f(x, y, A):
                flag = False  # A не подходит
                break
        if not flag:
            break

    # Если для всех x и y выражение истинно
    if flag:
        ans = A  # сохраняем подходящее значение A

# Печатаем наибольшее подходящее A
print(ans)

Ответ: 116

Ошибка.
Попробуйте повторить позже

Задача 24#29685Максимум баллов за задание: 1

Для какого наименьшего целого неотрицательного числа A  выражение

(3x + 5y ≥ A) ∨(x < 20)∨(y ≤ 17)

ложно для x = 20  и y = 18?

Показать ответ и решение

Чтобы дизъюнкция была ложной при любом неотрицательном целом значении x  и y  рассмотрим случай, когда (x < 20) = 0,  (y ≤ 17) = 0  и (3x + 5y ≥ A ) = 0.

Это эквивалентно следующей системе:

(
|| y < − 3x + A,
|{       5   5
| x ≥ 20,
||(
  y > 17

Самое сильное ограничение для A  в системе, когда выражение примет значение ложь, будет при возможных  x  и      y,  т. е. при 20  и 18  соответственно.

Подставим: 18 < − 3∗-20+ A-,
        5     5  откуда A > 150.  Значит, наименьшее значение A, когда выражение будет тождественно ложным — это 151.

Идея решения:

Ищем наименьшее неотрицательное A  , при котором формула

(3x+ 5y ≥ A) ∨ (x < 20) ∨ (y ≤ 17)

ложна при фиксированных значениях x = 20  и y = 18  . Перебираем значения A  по возрастанию (например, от 0  до 999  ) с помощью цикла for. Для каждого A  подставляем x = 20  , y = 18  и вычисляем логическое выражение. Если оно ложно, значит найдено минимальное подходящее A  ; выводим его и завершаем перебор.

Решение программой:

# перебираем A по возрастанию
for a in range(1000):
    # проверяем выражение при x=20, y=18 для текущего a
    # если выражение ложно, условие задачи выполнено
    if ((3*20 + 5*18 >= a) or (20 < 20) or (18 <= 17)) == False:
        # выводим найденное минимальное A
        print(a)
        # завершаем поиск, так как A минимально
        break

Ответ: 151

Ошибка.
Попробуйте повторить позже

Задача 25#29686Максимум баллов за задание: 1

Для какого наибольшего целого числа A  выражение

(          )
 x + 16y > A ∨ (x < 1287)∨ (y < 5)

тождественно истинно при любых неотрицательных x  и y?

Показать ответ и решение

Решение 1 (ручками):

Система для врагов:

(
|| x+  1y ≤ A,
|{     6
| x ≥ 1827,
||(
  y ≥ 5

Самое сильное ограничение для A  в системе будет при наименьших x  и y,  т. е. при 18-
27  и 5  соответственно.

Тогда для друзей имеем:    18
5+ 27 ⋅6 > 6⋅A,  откуда     3
A < 2.  Наибольшее значение A = 1.

Идея решения:

Нужно найти наибольшее целое A  , при котором выражение

(x + 1y > A ) ∨ (x < 18) ∨ (y < 5)
     6              27

тождественно истинно для всех неотрицательных x,y  . В программе перебираем значения A  в убывающем порядке (от 100  до 1  ), чтобы сразу получить наибольшее подходящее. Для каждого A  двумя вложенными циклами for перебираем x  и y  в диапазоне (от 0 до 99) и проверяем логическое выражение. Если найдётся хотя бы одна пара (x,y)  , для которой выражение не выполняется (ложно), текущий A  не подходит. Если после всех проверок выражение оказалось истинным для всех (x,y)  , печатаем этот A  как ответ и завершаем перебор.

Решение программой:

# перебираем A по убыванию, чтобы сразу найти наибольшее подходящее
for a in range(100, 0, -1):
    # считаем, что для текущего A выражение выполняется для всех x,y
    flag = True
    # перебираем неотрицательные x
    for x in range(100):
        # перебираем неотрицательные y
        for y in range(100):
            # проверяем выражение
            if ((x + 1 / 6 * y > a) or (x < 18 / 27) or (y < 5)) == 0:
                # нашли пару, где выражение не выполняется, значит, A не подходит
                flag = False
    # если ни одной "плохой" пары не было, текущий A подходит
    if flag:
        # выводим наибольшее подходящее A
        print(a)
        # завершаем поиск
        break

Ответ: 1

Ошибка.
Попробуйте повторить позже

Задача 26#29687Максимум баллов за задание: 1

Для какого наименьшего целого неотрицательного числа A  выражение

(x + 6y < A )∨(x > 25)∨(y ≥ 12)

тождественно истинно при любых целых неотрицательных x  и y?

Показать ответ и решение

Решение 1 (руками)

Чтобы дизъюнкция была истинной при любом неотрицательном целом значении x  и y  рассмотрим случай, когда (x > 25) = 0,  (y ≥ 12) = 0  и (x + 6y < A ) = 1.

Это эквивалентно следующей системе:

(|      x  A
||{ y < − 6 +-6,
  x ≤ 25,
|||(
  y < 12

Самое сильное ограничение для A  в системе будет при наибольших x  и y,  т. е. при 25  и 11  соответственно.

Подставим: 11 < − 265+ A6-,  откуда A > 91.  Наименьшее значение A = 92.

Идея решения:

Перебираем целые неотрицательные значения A  по возрастанию (в коде — (от 0 до 99). Для каждого A  вложенными циклами for перебираем положительные целые x,y  (в коде — от 1  до 999  ) и проверяем выполнение выражения

(x+ 6y < A) ∨ (x > 25) ∨ (y ≥ 12).

Если найдётся хотя бы одна пара (x,y)  , для которой выражение не выполняется (ложно), текущее A  отбрасываем. Первое A  , для которого выражение истинно при всех перебранных (x,y)  , и будет искомым наименьшим.

Решение программой:

# функция проверяет, что для данного a выражение истинно при всех x,y
def f(a):
    # перебираем положительные x
    for x in range(1, 1000):
        # перебираем положительные y
        for y in range(1, 1000):
            # если выражение ложно для текущих x,y — a не подходит
            if not ((x + 6 * y < a) or (x > 25) or (y >= 12)):
                return False
    # ни одной "плохой" пары не найдено — a подходит
    return True

# перебираем возможные значения A по возрастанию
for a in range(100):
    # если для текущего A выражение истинно для всех x,y
    if f(a):
        # выводим наименьшее подходящее A
        print(a)
        # завершаем поиск
        break

Ответ: 92

Ошибка.
Попробуйте повторить позже

Задача 27#29688Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

              --------
(3x + 9y ≥ A) ∨(x > 20)∨(y < 10)

тождественно истинно при любых целых неотрицательных x  и y?

Показать ответ и решение

Решение руками

Чтобы дизъюнкция была истинной при любом неотрицательном целом значении x  и y  рассмотрим случай, когда (x ≤ 20) = 0,  (y < 10) = 0  и (3x+ 9y ≥ A) = 1.

Это эквивалентно следующей системе:

(|
||{ 3x+ 9y ≥ A
  x > 20
|||(
  y ≥ 10

Самое сильное ограничение для A  в системе будет при наименьших x  и y,  т. е. при 21 и 10 соответственно.

Подставим: A ≤ 3⋅21+ 9 ⋅10 = 153  , откуда A ≤ 153  . Наибольшее значение A = 153.

Идея решения:

Перебираем целые неотрицательные значения A  от 1  до 299  . Для каждого A  вложенными циклами for перебираем положительные целые x,y  (в коде — от 1  до 199  ) и проверяем выполнение выражения

               --------
(3x + 9y ≥ A ) ∨ (x > 20) ∨ (y < 10).

Если найдётся хотя бы одна пара (x,y)  , для которой выражение не выполняется (ложно), текущее A  отбрасываем. Если же выражение истинно при всех перебранных (x,y)  , то сохраняем текущее A  как возможный ответ. В итоге максимальное из таких значений и будет искомым наибольшим A  .

Решение программой:

# функция проверяет выполнение выражения для x,y,a
def f(x, y, A):
    return (3*x + 9*y >= A) or (not(x > 20)) or (y < 10)

ans = 0
# перебираем возможные значения A от 1 до 299
for A in range(1, 300):
    flag = True
    # перебираем положительные x
    for x in range(1, 200):
        # перебираем положительные y
        for y in range(1, 200):
            # если выражение ложно хотя бы для одной пары (x,y) — A не подходит
            if not f(x, y, A):
                flag = False
                break
        if not flag:
            break
    # если текущее A подходит — запоминаем его
    if flag:
        ans = A

# выводим наибольшее подходящее A
print(ans)

Ответ: 153

Ошибка.
Попробуйте повторить позже

Задача 28#29689Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

(5x + 2y ⁄= 85)∨ (A ≤ x)∨ (x ≤ y)

тождественно истинно при любых целых неотрицательных x  и y?

Показать ответ и решение

Аналитическое решение

Инвертируем известную часть:

(5x+ 2y = 85) ∧(x > y)

Нам нужно взять такое A  , чтобы оно было меньше либо равно X  . Значит, стоит взять наименьшее возможное    X  , чтобы при больших значениях X  условие точно выполнялось.

Чтобы выполнялось (5x + 2y = 85)  , нужно брать значения Y  кратные 5, т.к. 5x  кратно 5, и 85  кратно 5.

Нам подходят следующие пары переменных:

X = 15,Y = 5

X = 13,Y = 10

Пара X = 11,Y = 15  уже не будет подходить, т.к. условие (x > y)  не выполняется.

Следовательно, берём пару с наименьшим X  : X = 14,Y = 10  .

При X  = 13  , наибольшее A  равно 13.

Идея решения:

Перебираем целые неотрицательные значения A  по убыванию (в коде — перебор от 100 до 2 по убыванию), так как нам нужен наибольший подходящий A  . Для каждого A  вложенными циклами for перебираем все неотрицательные целые пары (x,y)  (в коде — от 0  до 999  ) и проверяем выполнение выражения

(5x +2y ⁄= 85)∨ (A ≤ x) ∨(x ≤ y).

Если найдётся хотя бы одна пара (x,y)  , для которой выражение не выполняется (ложно), текущее A  отбрасываем. Если же для всех перебранных пар выражение истинно, A  считается подходящим и выводится как наибольшее.

Решение программой:

# перебор возможных значений A от 100 до 2 по убыванию
for a in range(100, 1, -1):  # перебор от 100 до 2 по убыванию
    flag = True  # предполагаем, что текущее A подходит
    # перебор x от 0 до 999
    for x in range(1000):
        # перебор y от 0 до 999
        for y in range(1000):
            # если выражение ложно для текущих x,y — A не подходит
            if ((5*x + 2*y != 85) or (a <= x) or (x <= y)) == False:
                flag = False
                # если нашли "плохую" пару, прекращаем перебор y
                break
        # прекращаем перебор x
        if flag == False:
            break
    # если выражение истинно для всех x,y, выводим A и завершаем поиск
    if flag == True:
        print(a)
        break

Ответ: 13

Ошибка.
Попробуйте повторить позже

Задача 29#29690Максимум баллов за задание: 1

Для какого наименьшего целого неотрицательного числа A  выражение

(3x + 4y ⁄= 52)∨ (A < x )∨(y ≤ x)

тождественно ложно хотя бы при одном наборе натуральных значений x  и y  ?

Показать ответ и решение

Аналитическое решение

Чтобы дизъюнкция была ложной при некотором неотрицательном целом значении x  и y  рассмотрим случай, когда (3x+ 4y ⁄= 52) = 0,  (y ≤ x) = 0  и (A < x) = 0.

Это эквивалентно следующей системе:

(|
||{3x + 4y = 52,
 y > x,
|||(
 A ≥ x

Определим подходящие пары значений (x;y)  , которые удовлетворяют первым 2 условиям системы:

y = 13− 3x
        4

     3
13−  4x > x

    52
x < 3 ≈ 7.4

Так как y = 13 − 3x,
        4  а оба числа – натуральные, то подойдет только пара (4;10).

Значит, должно выполняться неравенство A ≥ 4,  откуда наименьшее значение A  4.

Идея решения:

Перебираем целые неотрицательные значения A  по возрастанию (в коде — от 0 до 999). Для каждого A  вложенными циклами for перебираем все натуральные числа x  и y  (в коде — от 1 до 999) и проверяем выражение

(3x +4y ⁄= 52)∨ (A < x) ∨(y ≤ x).

Если для какой-либо пары (x,y)  выражение ложно, текущий A  подходит, так как условие задачи требует, чтобы формула была ложна хотя бы для одного набора значений. Первое найденное такое A  и будет наименьшим подходящим.

Решение программой:

# перебор возможных значений A от 0 до 999
for a in range(0, 1000):  # перебираем неотрицательные A
    c = 0  # переменная-флаг, показывает найдено ли "ложное" значение
    # перебор натуральных x
    for x in range(1, 1000):
        # перебор натуральных y
        for y in range(1, 1000):
            # вычисляем логическое выражение
            F = (3*x + 4*y != 52) or (a < x) or (y <= x)
            # если выражение ложно, A подходит
            if F == False:
                c = 1  # меняем значение флага
                break
        # если флаг изменился, прекращаем оба цикла
        if c == 1:
            break
    # если найдено хотя бы одно ложное выражение, выводим A и прекращаем поиск
    if c == 1:
        print(a)
        break

Ответ: 4

Ошибка.
Попробуйте повторить позже

Задача 30#29691Максимум баллов за задание: 1

Для какого наименьшего целого неотрицательного числа A  выражение

(3x + y ≥ A )∨(x < 30)∨(y ≤ 55)

будет тождественно ложно при некотором (хотя бы одном) наборе целых неотрицательных значений x  и y  ?

Показать ответ и решение

Аналитическое решение

Чтобы дизъюнкция была ложной при некотором неотрицательном целом значении x  и y  рассмотрим случай, когда (x < 30) = 0,  (y ≤ 55) = 0  и (3x + y ≥ A ) = 0.

Это эквивалентно следующей системе:

(|
||{y < − 3x + A,
 x ≥ 30,
|||(
 y > 55

Самое сильное ограничение для A  в системе, когда выражение примет значение ложь, будет при наименьших   x  и       y,  т. е. при 30  и 56  соответственно.

Подставим: 56 < − (3 ∗30)+ A,  откуда A > 146.  Значит, наименьшее значение A, когда выражение будет тождественно ложным — это 147.

Идея решения:

Перебираем целые неотрицательные значения A  по возрастанию (в коде — от 0 до 999). Для каждого A  вложенными циклами for перебираем все неотрицательные целые числа x  и y  (в коде — от 0 до 999) и проверяем выражение

(3x + y ≥ A) ∨(x < 30)∨(y ≤ 55).

Если найдётся хотя бы одна пара (x,y)  , для которой выражение ложно, текущий A  подходит. Первое найденное такое A  и будет наименьшим подходящим.

Решение программой:

# перебор возможных значений A от 0 до 999
for a in range(0, 1000):  # перебираем неотрицательные A
    c = 0  # переменная-флаг, показывает найдено ли "ложное" значение
    # перебор неотрицательных x
    for x in range(0, 1000):
        # перебор неотрицательных y
        for y in range(0, 1000):
            # вычисляем логическое выражение
            F = (3*x + y >= a) or (x < 30) or (y <= 55)
            # если выражение ложно, A подходит
            if F == False:
                c = 1  # меняем значение флага
                break
        # если флаг изменился, прекращаем оба цикла
        if c == 1:
            break
    # если найдено хотя бы одно ложное выражение, выводим A и прекращаем поиск
    if c == 1:
        print(a)
        break

Ответ: 147

Ошибка.
Попробуйте повторить позже

Задача 31#29692Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

(6x + 3y ≥ A) ∨(x ≤ 40)∨(y < 57)

тождественно истинно при любых целых неотрицательных x  и y?

Показать ответ и решение

Решение 1 (ручками)

Чтобы дизъюнкция была истинной при любом неотрицательном целом значении x  и y  рассмотрим случай, когда (x ≤ 40) = 0,  (y < 57) = 0  и (6x + 3y ≥ A ) = 1.

Это эквивалентно следующей системе:

(      6x   A
|||{ y ≥ −-3-+ 3-,
  x > 40,
|||
( y ≥ 57

Самое сильное ограничение для A  в системе будет при наименьших x  и y,  т. е. при 41  и 57  соответственно.

Подставим: 57 ≥ − 6⋅41-+ A-,
        3    3  откуда A ≤ 417.  Наибольшее значение A = 417.

Идея решения:

Перебираем целые неотрицательные значения A  по убыванию (в коде — от 1000 до 1). Для каждого A  вложенными циклами for перебираем все неотрицательные целые числа x  и y  (в коде — от 0 до 999) и проверяем выражение

(6x+ 3y ≥ A)∨ (x ≤ 40)∨ (y < 57).

Если найдётся хотя бы одна пара (x,y)  , для которой выражение ложно, текущее A  не подходит. Первое A  , для которого выражение истинно для всех перебранных (x,y)  , и будет искомым наибольшим.

Решение программой:

# функция проверяет, что для данного A выражение истинно для всех x,y
def f(a):
    # перебираем неотрицательные x
    for x in range(1000):
        # перебираем неотрицательные y
        for y in range(1000):
            # если выражение ложно для текущих x,y — a не подходит
            if ((6 * x + 3 * y >= a) or (x <= 40) or (y < 57))==0:
                return False
    # ни одной "плохой" пары не найдено — a подходит
    return True

# перебираем возможные значения A по убыванию
for a in range(1000, 1, -1):
    # если для текущего A выражение истинно для всех x,y
    if f(a):
        # выводим наибольшее подходящее A
        print(a)
        # завершаем поиск
        break

Ответ: 417

Ошибка.
Попробуйте повторить позже

Задача 32#29693Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

              --------
(5x + 7y ≥ A) ∨(x > 40)∨(y < 7)

тождественно истинно при любых целых неотрицательных x  и y?

Показать ответ и решение

Решение 1 (ручками)

Инвертируем известную часть:

(x > 40)∧ (y ≤ 7)

Чтобы условие (5x + 7y ≤ A )  всегда выполнялось, нужно взять наименьшие значения для x  и y  , чтобы при больших значениях переменных A  точно было меньше либо равно левой части.

При x = 41  и y = 7  , 5 ∗41+ 7 ∗7 ≤ A  , 254 ≤ A  .

Значит, A = 254  .

Идея решения:

Перебираем целые неотрицательные значения A  по убыванию (в коде — от 500 до 1). Для каждого A  вложенными циклами for перебираем все неотрицательные целые числа x  и y  (в коде — от 0 до 299) и проверяем выражение

              --------
(5x + 7y ≥ A) ∨(x > 40)∨(y < 7).

Если найдётся хотя бы одна пара (x,y)  , для которой выражение ложно, текущее A  отбрасываем. Первое A  , для которого выражение истинно для всех перебранных (x,y)  , и будет искомым наибольшим.

Решение программой:

# перебираем возможные значения A по убыванию
for A in range(500, 1, -1):
    # предполагаем, что A подходит
    flag = True
    # перебираем неотрицательные x
    for x in range(300):
        # перебираем неотрицательные y
        for y in range(300):
            # проверяем выражение
            p = (5 * x + 7 * y >= A) or (x <= 40) or (y < 7)
            # если выражение ложно для текущей пары, A не подходит
            if p == 0:
                flag = False
                break
        # если A уже не подходит, прерываем цикл по x
        if flag == 0:
            break
    # если A подходит для всех x,y — выводим и прекращаем поиск
    if flag:
        print(A)
        break

Ответ: 254

Ошибка.
Попробуйте повторить позже

Задача 33#29694Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

(3x + 5y ⁄= 150)∨ (A < x )∨(x ≤ y)

тождественно истинно при любых целых неотрицательных x  и y?

Показать ответ и решение

Решение руками:

Чтобы дизъюнкция была истинной при любом неотрицательном целом значении x  и y  рассмотрим случай, когда (3x+ 5y ⁄= 150) = 0,  (x ≤ y) = 0  и (A < x) = 1.

Это эквивалентно следующей системе:

(|
||{ 3x+ 5y = 150,
  x > y,
|||(
  A < x

Самое сильное ограничение для A  в системе будет тогда, когда x  станет минимально возможным, а y  максимально возможным, то есть при 20  и 18  соответственно.

Значит, значение A  при заданных условиях — 19.

Идея решения:

Перебираем целые неотрицательные значения A  по возрастанию (в коде — от 0 до 999). Для каждого A  вложенными циклами for перебираем все неотрицательные целые числа x  и y  (в коде — от 0 до 99) и проверяем выражение

(3x+ 5y ⁄= 150)∨ (A < x)∨ (x ≤ y).

Если найдётся хотя бы одна пара (x,y)  , для которой выражение ложно, текущее A  отбрасываем. Если же для всех перебранных (x,y)  выражение истинно, текущее A  считается подходящим. Поскольку требуется найти наибольшее такое A  , в коде продолжаем перебор и фиксируем максимум всех подходящих A  .

Решение программой:

# перебираем неотрицательные значения A
for a in range(0, 1000):
    # переменная-флаг, показывает, подходит ли текущее A
    c = 0
    # перебираем неотрицательные x
    for x in range(100):
        # перебираем неотрицательные y
        for y in range(100):
            # проверяем выражение для текущей пары x, y
            if ((3*x + 5*y != 150) or (a < x) or (x <= y)) == False:
                # если выражение ложно — A не подходит
                c = 1
                break
        # если A уже не подходит, прерываем цикл по x
        if c == 1:
            break
    # если A подходит для всех x,y — выводим
    if c == 0:
        print(a)

Ответ: 19

Ошибка.
Попробуйте повторить позже

Задача 34#29695Максимум баллов за задание: 1

Для какого наименьшего целого неотрицательного числа A  выражение

(3x + 5y ⁄= 80)∨ (A > x )∨(A > y)

тождественно истинно при любых целых неотрицательных x  и y?

Показать ответ и решение

Решение 1 (руками)

Чтобы дизъюнкция была истинной при любом неотрицательном целом значении x  и y  рассмотрим случай, когда (3x+ 5y ⁄= 80) = 0  , (A > x) = 1  или (A > y) = 1  .

Это эквивалентно следующей системе:

(|
||{3⌊x + 5y = 80,
    A > x,
|||(⌈
    A > y

Самое сильное ограничение для A  в системе будет тогда, когда x  и y  станут минимально возможными, то есть при 10  и 10  соответственно.

Значит, наименьшее значение A  при заданных условиях — 11

Идея решения:

Перебираем неотрицательные значения A  по возрастанию (в коде — от 0 до 999). Для каждого A  вложенными циклами for перебираем все неотрицательные целые числа x  и y  (в коде — от 0 до 999) и проверяем выражение

(3x+ 5y ⁄= 80)∨ (A > x)∨ (A > y).

Если найдётся хотя бы одна пара (x,y)  , для которой выражение ложно, текущее A  отбрасываем. Если же для всех перебранных (x,y)  выражение истинно, текущее A  считается подходящим. Поскольку требуется найти наименьшее такое A  , перебор останавливаем на первом подходящем.

Решение программой:

# функция проверяет, что для данного a выражение истинно для всех x,y
def f(a):
    # перебираем неотрицательные x
    for x in range(1000):
        # перебираем неотрицательные y
        for y in range(1000):
            # если выражение ложно для пары x,y — a не подходит
            if ((3 * x + 5 * y != 80) or (a > x) or (a > y)) == 0:
                return False
    # ни одной "плохой" пары не найдено — a подходит
    return True

# перебираем значения A по возрастанию
for a in range(1000):
    # если для текущего A выражение истинно для всех x,y
    if f(a):
        # выводим наименьшее подходящее A
        print(a)
        break

Ответ: 11

Ошибка.
Попробуйте повторить позже

Задача 35#29696Максимум баллов за задание: 1

Для какого наименьшего целого неотрицательного числа A  выражение

(10x +3y − 5z < A )∨ (z > y)∨ (y > 30)∨ (x > 50)

тождественно истинно при любых целых неотрицательных x,  y  и z?

Показать ответ и решение

Сделаем отрицание известной части: (z ≤ y) ∧(y ≤ 30) ∧(x ≤ 50)

Если A  будет больше наибольшего значения, которое можно достичь в левой части выражения с A  при таких    x  , y  , z  , то A  будет гарантированно больше любого значения, которое можно достичь при таких x  , y  , z  .

Для максимизации значения в левой части выражения с A  берем наибольшие x,y,  то есть x = 50,y = 30  и наименьший z = 0  .

Получаем 10 ⋅50+ 3⋅30 − 0 < A  . Откуда наименьшее A = 591  .

Идея решения:

Перебираем неотрицательные значения A  по возрастанию (в коде — от 0 до 999). Для каждого A  вложенными циклами for перебираем все неотрицательные целые числа x,y,z  (в коде — от 0 до 99) и проверяем выражение

(10x+ 3y − 5z < A) ∨(z > y)∨(y > 30)∨ (x > 50).

Если найдётся хотя бы одна тройка (x,y,z)  , для которой выражение ложно, текущее A  отбрасываем. Если же для всех перебранных (x,y,z)  выражение истинно, текущее A  считается подходящим. Поскольку требуется найти наименьшее такое A  , перебор останавливаем на первом подходящем.

Решение программой:

# функция проверяет, что для данного a выражение истинно для всех x,y,z
def f(a):
    # перебираем неотрицательные x
    for x in range(100):
        # перебираем неотрицательные y
        for y in range(100):
            # перебираем неотрицательные z
            for z in range(100):
                # если выражение ложно для текущих x,y,z — a не подходит
                if ((10*x + 3*y - 5*z < a) or (z > y) or (y > 30) or (x > 50)) == False:
                    return False
    # ни одной "плохой" тройки не найдено — a подходит
    return True

# перебираем значения A по возрастанию
for a in range(1000):
    # если для текущего A выражение истинно для всех x,y,z
    if f(a):
        # выводим наименьшее подходящее A
        print(a)
        break

Ответ: 591

Ошибка.
Попробуйте повторить позже

Задача 36#33604Максимум баллов за задание: 1

Для какого наибольшего целого числа A  формула

(x+ y ≤ 25)∨(y ≤ x+ 3)∨ (y ≥ A )

тождественно истинна, (т. е. принимает значение 1  ) при любых натуральных значениях переменных x  и y  ?

Показать ответ и решение

Решение аналитически:

Первым шагом инвертируем известную часть, чтобы определить при каких x  исходное выражение будет ложно:

(x+ y > 25)∧ (y > x+ 3)

Тепеь определим, для какого минимального y  это выражение будет давать истину. Так как значение y  связано со значением x  неравенством y > x+ 3  , то чтобы минимизировать y  , нужно минимизировать и x  .

Если мы зафиксируем какое-то значение x  , то для выбранного x  минимальное значение y = x + 4  (так как y > x+ 3  ). Значит, y+ x = 2∗x + 4 > 25  . Тогда минимальный подходящий x = 11  , а соответствующий ему минимальный y = 15  .

Значит, значение y = 15  это минимальные значение, которое будет давать ложь в исходном выражении. Тогда, чтобы исходное выражение всегда было истинно, то должно выполняться неравенство 15 ≥ A  . Отсюда наибольшее значение A = 15  .

Идея решения:

Перебираем целые значения A  по убыванию (в коде — от 100 до 2). Для каждого A  вложенными циклами for перебираем натуральные числа x  и y  (в коде — от 1 до 999) и проверяем истинность выражения

(x + y ≤ 25)∨ (y ≤ x + 3)∨ (y ≥ A).

Если найдётся хотя бы одна пара (x,y)  , для которой выражение ложно, текущее A  отбрасываем. Первое A  , для которого выражение истинно при всех перебранных (x,y)  , и будет искомым наибольшим.

Решение программой:

# функция проверяет, что для данного a выражение истинно для всех x,y
def f(a):
    # перебираем натуральные x
    for x in range(1, 1000):
        # перебираем натуральные y
        for y in range(1, 1000):
            # если выражение ложно для текущих x,y — a не подходит
            if not (x + y <= 25 or y <= x + 3 or y >= a):
                return False
    # ни одной "плохой" пары не найдено — a подходит
    return True

# перебираем возможные значения A по убыванию
for a in range(100, 1, -1):
    # если для текущего A выражение истинно для всех x,y
    if f(a):
        # выводим наибольшее подходящее A
        print(a)
        break

Ответ: 15

Ошибка.
Попробуйте повторить позже

Задача 37#36827Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

(7x+ 2y ≥ A)∨ (x ≤ 20) ∨(y < 52)

тождественно истинно при любых целых неотрицательных x  и y?

Показать ответ и решение

Решение руками:

Составим систему для тех случаев, когда выражение тождественно ложно:

(
||| 7x+ 2y < A
{
|| x > 20
|( y ≥ 52

Попробуем взять наименьшие x и y, то есть x = 21, y = 52.

Так как нам требуется, чтобы 7x + 2y ≥ A  , то есть 7∗ 21+ 2∗ 52 ≥ A  . Тогда A ≤ 251  .

Наибольшее значение A = 251.

 

Идея решения:

Перебираем целые неотрицательные значения A  по возрастанию (в коде — от 1 до 299). Для каждого A  вложенными циклами for перебираем положительные целые x  и y  (в коде — от 1 до 199) и проверяем истинность выражения

(7x+ 2y ≥ A)∨ (x ≤ 20)∨ (y < 52).

Если найдётся хотя бы одна пара (x,y)  , для которой выражение ложно, текущее A  отбрасываем. Последнее    A  , для которого выражение истинно при всех перебранных (x,y)  , будет искомым наибольшим.

Решение программой:

# функция проверяет, что для данного A выражение истинно для всех x,y
def f(x, y, A):
    # возвращаем логическое значение выражения
    return (7*x + 2*y >= A) or (x <= 20) or (y < 52)

ans = 0
# перебираем возможные значения A по возрастанию
for A in range(1, 300):
    flag = True
    # перебираем положительные x
    for x in range(1, 200):
        # перебираем положительные y
        for y in range(1, 200):
            # если выражение ложно для текущих x,y — A не подходит
            if not f(x, y, A):
                flag = False
                break
        if not flag:
            break
    # если для всех x,y выражение истинно — сохраняем A
    if flag:
        ans = A
# выводим наибольшее подходящее A
print(ans)

Ответ: 251

Ошибка.
Попробуйте повторить позже

Задача 38#36828Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

(            )
  x+ 13 y ≥ A ∨ (x ≥-y)-∨(y < 7)
      9

тождественно истинно при любых целых неотрицательных x  и y?

Показать ответ и решение

Сделаем отрицание известной части: (x ≥ y)∧(y ≥ 7)

Тогда, чтобы для данных x  и y  выражение было истинным, скобка с A  должна давать истину для всех таких     x  и y  . Если A  будет меньше или равно самому минимальному значению, которое можно получить в левой части выражения с A  при таких x  и y  , то A  будет гарантированно меньше любых значений, которые можно получить из таких   x  и y  .

Тогда выбираем наименьшие x  и y  , то есть 7 ∗9   13∗7
--9- + --9--≥ A  .

154
--- ≥ A
 9

Наибольшее значение A = 17.

 

Идея решения:

Перебираем целые неотрицательные значения A  по убыванию (в коде — от 100 до 2). Для каждого A  вложенными циклами for перебираем целые неотрицательные x  и y  (в коде — от 0 до 299) и проверяем выполнение выражения

(    13     )   -------
 x + 9-y ≥ A  ∨ (x ≥ y)∨ (y < 7).

Если для любой пары (x,y)  выражение не выполняется (ложно), текущее A  отбрасываем. Первое A  , для которого выражение истинно при всех перебранных (x,y)  , и будет искомым наибольшим.

Решение программой:

# функция проверяет, что для данного a выражение истинно для всех x,y
def f(x, y, a):
    return (x + 13 / 9 * y >= a) or (not (x >= y)) or (y < 7)

# перебираем возможные значения A по убыванию
for a in range(100, 1, -1):
    # если для всех x,y выражение истинно
    if all(f(x, y, a) for x in range(300) for y in range(300)):
        # выводим наибольшее подходящее A
        print(a)
        break

Ответ: 17

Ошибка.
Попробуйте повторить позже

Задача 39#41960Максимум баллов за задание: 1

Для какого наименьшего целого числа A  формула

(x > 16) ∨(y > 25) ∨(A > x +y)

тождественно истинна, (т. е. принимает значение 1  ) при любых натуральных значениях переменных x  и y  ?

Показать ответ и решение

Решение руками

Найдем при каких x  и y  выражение ложно. Для этого отрицаем известную часть:

(
{ x ≤ 16
(
  y ≤ 25

Нужно, чтобы для таких x  и y  выражение стало истинно. Значит нужно, чтобы неравенство A > x +y  для них выполнялось.

Наибольшее x = 16  , y = 25  . Тогда A > 41  . Наименьшее A = 42  .

Идея решения:

Перебираем целые значения A  по возрастанию (в коде — от -10 до 999). Для каждого A  вложенными циклами for перебираем натуральные x  и y  (в коде — от 1 до 2999) и проверяем выполнение выражения

(x > 16)∨ (y > 25)∨ (A > x+ y).

Если для какой-либо пары (x,y)  выражение не выполняется (ложно), текущее A  отбрасываем. Первое A  , для которого выражение истинно при всех перебранных (x,y)  , и будет искомым наименьшим.

Решение программой:

# перебираем целые значения A
for a in range(-10, 1000):
    c = 0  # флаг, показывает, найдено ли ложное выражение
    # перебираем натуральные x
    for x in range(1, 3000):
        # перебираем натуральные y
        for y in range(1, 3000):
            # проверяем выражение
            if ((x > 16) or (y > 25) or (a > x + y)) == False:
                c = 1  # выражение ложно, A не подходит
                break
        if c == 1:  # если флаг поднят, выходим из цикла по x
            break
    if c == 0:  # если ложного выражения не найдено
        print(a)  # наименьшее подходящее A
        break  # останавливаем перебор

Ответ: 42

Ошибка.
Попробуйте повторить позже

Задача 40#41963Максимум баллов за задание: 1

Для какого наибольшего целого числа A  формула

(A < x + y)∨ (x ≥ 48)∨ (y > 2)

тождественно истинна, (т. е. принимает значение 1  ) при любых натуральных значениях переменных x  и y  ?

Показать ответ и решение

Решение руками

Найдем при каких x  и y  выражение ложно. Для этого отрицаем известную часть:

(
{ x < 48
(
  y ≤ 2

Нужно, чтобы для таких x  и y  выражение стало истинно. Значит нужно, чтобы неравенство A < x+ y  для них выполнялось.

Наименьшее x = 1  , y = 1  . Тогда A < 2  . Максимальное возможное A = 1  .

Идея решения:

Перебираем целые значения A  по возрастанию (в коде — от -10 до 999). Для каждого A  вложенными циклами for перебираем натуральные x  и y  (в коде — от 1 до 2999) и проверяем выполнение выражения

(A < x +y) ∨(x ≥ 48)∨(y > 2).

Если для какой-либо пары (x,y)  выражение не выполняется (ложно), текущее A  отбрасываем. Последнее  A  , для которого выражение истинно при всех перебранных (x,y)  , и будет искомым наибольшим.

Решение программой:

# перебираем целые значения A
for a in range(-10, 1000):
    c = 0  # флаг, показывает, найдено ли ложное выражение
    # перебираем натуральные x
    for x in range(1, 3000):
        # перебираем натуральные y
        for y in range(1, 3000):
            # проверяем выражение
            if ((a < x + y) or (x >= 48) or (y > 2)) == False:
                c = 1  # выражение ложно, A не подходит
                break
        if c == 1:  # если флаг поднят, выходим из цикла по x
            break
    if c == 0:  # если ложного выражения не найдено
        print(a)  # наибольшее подходящее A

Ответ: 1
Рулетка
Вы можете получить скидку в рулетке!