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

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

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

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

Задача 1#5784

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

(69 ⁄= y + 2x ) ∨ (A < x) ∨ (A < y)

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

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

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

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

69 = y + 2x

Пусть y =  1,x = 34  . Чтобы выполнялось условие A  < y  , нужно взять A = 0  , в таком случае условие будет выполняться и для Y  , и для X  .

Если мы возьмём пару y = 3,x = 33  , то теперь наибольшее значение A  уже будет равно 2.

Соответственно, чем больше мы будем брать Y  , тем большее значение A  можно взять.

Но, когда значение Y  станет больше, чем X  , то тогда уже придётся ориентироваться в первую очередь на условие для X  .

Следовательно, чтобы найти наибольшее А, нам нужна такая пара Y,X  , при которой будет выполняться Y  = X  .

Это будет пара Y =  23,X  = 23  , и при таких значениях переменных наибольшее A  будет равно 22.

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

Идея заключается в переборе возможных значений A  (от 0  до 1000  ) и проверке, что для всех комбинаций x  и y  (от 1  до 1000  ) выражение

(69 ⁄= y + 2x ) ∨ (A < x) ∨ (A < y)

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

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

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

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

Ответ: 22

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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