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

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

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

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

Задача 1#33604

Для какого наибольшего целого числа 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

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

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