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

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

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

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

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

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

(x ≥ 7) ∨(2x < y)∨(xy < A)

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

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

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

Отрицаем известную часть: (x < 7) ∧(y ≤ 2x )  . Чтобы найти минимальное значение A  необходимо, чтоб произведение xy  было максимальным. Исходя из полученных неравенств получим x = 6  , тогда y = 12  . Теперь подставим эти значения в неравенство (xy < A)  . Получим 72 < A  . Тогда минимально A = 73  .

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

Для нахождения наименьшего целого неотрицательного A  , при котором выражение

(x ≥ 7) ∨(2x < y)∨(xy < A)

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

for a in range(100):
    f = 0  # флаг: 0 - выражение пока истинно для всех x и y, 1 - найдено ложное значение
    # перебор всех x от 0 до 100
    for x in range(101):
        # перебор всех y от 0 до 99
        for y in range(100):
            # проверка выполнения выражения для текущих x, y и A
            if ((x >= 7) or (2 * x < y) or (x * y < a)) == False:
                f = 1  # если выражение ложно, меняем флаг
                break  # выход из цикла по y
        if f == 1:
            break  # выход из цикла по x при найденном ложном случае
    if f == 0:
        # если выражение истинно для всех x и y, выводим A и прекращаем перебор
        print(a)
        break

Получаем ответ: 73.

Ответ: 73

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

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

Укажите наименьшее целое значение A, при котором выражение

(3y+ x < A)∨ (x > 12)∨ (y > 15)

истинно для любых целых и положительных значений x и y.

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

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

Отрицаем известную часть: (x ≤ 12)∧ (y ≤ 15)  . Чтобы найти минимальное значение A  необходимо, чтоб x  и   y  были максимальны. Исходя из полученных неравенств получим x = 12  , y = 15  . Теперь подставим эти значения в неравенство (3y+ x < A)  . Получим 57 < A  . Тогда минимально A = 58  .

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

Для нахождения наименьшего целого A  , при котором выражение

(3y+ x < A)∨ (x > 12)∨ (y > 15)

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

for a in range(300):
    # Переменная-флаг: True - выражение пока истинно для всех x и y, False - найдено ложное значение
    flag = True
    # перебор всех x от 1 до 499
    for x in range(1, 500):
        # перебор всех y от 1 до 499
        for y in range(1, 500):
            # проверка выполнения выражения для текущих x, y и A
            # если выражение ложно, меняем флаг
            if (((3*y + x) < a) or (x > 12) or (y > 15)) == False:
                flag = False
                break  # выход из цикла по y
    # если выражение истинно для всех x и y, выводим A и прекращаем перебор
    if flag == True:
        print(a)
        break

Получается ответ: 58.

Ответ: 58

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

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

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

(3 ⋅x+ 5⋅y < A) ∨(y > x)∨(x > 15)

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

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

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

(3 ⋅x+ 5⋅y < A) ∨(y > x)∨(x > 15)

Нам нужно, чтобы это выражение всегда было истинно; так как между скобками стоит ИЛИ, то достаточно чтобы хотя бы одна скобка давала истину. Известная часть (y > x )∨(x > 15)  дает ложь когда x ≤ 15  и y ≤ x  . Получаем, что первая скобка обязательно должна давать истину когда x ∈ [0;15]  и y ∈ [0;15]  , то есть должно выполняться неравенство A > 3 ⋅15+ 5⋅15 = 120  . Наименьшее A  , которое подходит под условие это 121.

 

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

Для нахождения наименьшего целого неотрицательного A  , при котором выражение

(3 ⋅x+ 5⋅y < A) ∨(y > x)∨(x > 15)

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

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

Получаем ответ: 121.

Ответ: 121

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

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

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

(2⋅x + y > A )∨ (y < x)∨ (x < 28)

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

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

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

(2⋅x+ y > A)∨ (y < x) ∨(x < 28)

Нам нужно, чтобы это выражение всегда было истинно; так как между скобками стоит ИЛИ, то достаточно чтобы хотя бы одна скобка давала истину. Известная часть (y < x)∨ (x < 28)  дает ложь когда y ≥ x  и x ≥ 28  . Получаем, что первая скобка обязательно должна давать истину когда x ∈ [28;+∞ ]  и y ∈ [28;+∞ ]  , то есть должно выполняться неравенство A < 2⋅28+ 28 = 84  . Наибольшее A  , которое подходит под условие это 83.

 

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

Для нахождения наибольшего целого неотрицательного A  , при котором выражение

(2⋅x+ y > A)∨ (y < x) ∨(x < 28)

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

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

Получаем ответ: 83.

Ответ: 83

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

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

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

(x ⋅y < A )∨ (x < y)∨ (x > 5)

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

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

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

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

(x ≥ y)∧ (x ≤ 5)

Тепеь определим, для каких крайних значений x  и y  это выражение будет давать истину. Правая часть будет давать истину при (x ≤ 5)  , возьмем крайнее значение – 5. Используем это значение для левой части: (5 ≥ y)  . Получаем крайнее значение y  – 5.

Вернемся к неизвестной части и подставим туда найденные крайние значения: (5⋅5 = 25 < A )  , отсюда A = 26  .

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

Для нахождения наименьшего целого неотрицательного A  , при котором выражение

(x⋅y < A)∨ (x < y)∨ (x > 5)

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

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

Получаем ответ: 26.

Ответ: 26

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

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

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

(2⋅x < y)∨(x > 13)∨ (x ⋅y < A )

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

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

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

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

(2⋅x ≥ y) ∧(x ≤ 13)

Тепеь определим, для каких крайних значений x  и y  это выражение будет давать истину. Правая часть будет давать истину при (x ≤ 13)  , возьмем крайнее значение – 13. Используем это значение для левой части: (2 ⋅13 ≥ y)  . Получаем крайнее значение y  – 26.

Вернемся к неизвестной части и подставим туда найденные крайние значения: 13 ⋅26 = 338 < A  , отсюда A = 339  .

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

Для нахождения наименьшего целого неотрицательного A  , при котором выражение

(2⋅x < y)∨ (x > 13)∨ (x⋅y < A)

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

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

Получаем ответ: 339.

Ответ: 339

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

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

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

(x > 80) ∨(y > 70)∨(3⋅x − 5⋅y < A)

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

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

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

Отрицаем известную часть и получаем, что:

(x ≤ 80)∧ (y ≤ 70)

То есть x ∈ [0;80],y ∈ [0,70]  . Нам необходимо, чтобы A > 3 ⋅x− 5⋅y  .

Максимальное значение в левой части третьей скобки достигается при значении x = 80; y = 0. Наименьшее значение А, при котором будет выполнено неравенство равняется: A > 3⋅80− 5 ⋅0 → A > 240 → A = 241  .

 

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

Для нахождения наименьшего целого A  , при котором выражение

(x > 80) ∨(y > 70)∨(3⋅x − 5⋅y < A)

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

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

Получаем ответ: 241.

Ответ: 241

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

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

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

(y+ 10⋅x < A) ∨(5⋅x + 2⋅y > 102)

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

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

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

Отрицаем известную часть: 5⋅x + 2⋅y ≤ 102  . Так как х и у – целые натуральные, то минимальное значение y  равно 1. Тогда 5⋅x ≤ 100  , то есть x    = 20
 max  .

Значит, A > 1 + 10⋅20 → A > 201 → A = 202  .

 

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

Идея заключается в переборе возможных значений A  (от -1000 до 1000) и проверке, что для всех комбинаций  x  и y  (от 1 до 1000) выражение (y+ 10x < A)∨ (5x+ 2y > 102)  выполняется. Если для какого-то A  найдётся хотя бы одна пара (x,y)  , нарушающая условие, это A  отбрасывается. Минимальное A  , при котором условие выполняется для всех x  и y  , и будет ответом.

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

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

Ответ: 202

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

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

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

(x+ 2y < A)∨ (y > x) ∨(x > 60)

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

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

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

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

(y ≤ x)∧ (x ≤ 60)

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

В таком случае, x = 60  и y = 60  .

Наименьшим A  , при котором неравенство 60+ 2× 60 = 180 < A  выполняется, является A = 181  .

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

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

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

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

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