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

15.05 Отрезки

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

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

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

На числовой прямой даны два отрезка: P  = [55;100], Q  = [66;129]. Укажите наименьшую возможную длину такого отрезка A  , что формула

(x ∈ P ) → (((x ∈ Q )∧¬ (x ∈ A)) → ¬(x ∈ P ))

истинна, т.е. принимает значение 1 при любом значении переменной x  .

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

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

В начале для удобства заменим некоторые выражения:

x ∈ Q = Q
x ∈ P = P
x ∈ A = A

Тогда выражение примет такой вид:

P  =⇒  ((Q ∧ ¬A ) =⇒  ¬P)

Заменим импликацию на отрицание первого или второе. Выражение будет выглядеть следующим образом:

¬P ∨ (¬(Q ∧¬A )∨ ¬P )

Раскроем отрицание в скобке. Теперь выражение имеет такой вид:

¬P ∨ (¬Q ∨ A ∨¬P )

Избавимся от повторяющейся Р под отрицанием и получим окончательное упрощенное выражение:

¬P ∨ ¬Q ∨ A

Как можем заметить, нам нужно найти значения x когда выражение равно истине, при этом только А должна равняться единице, а все остальные – 0. Не P и Не Q будут равны 0, когда х будут находиться в пределах отрезков P и Q. Получается, нас интересует отрезок, который находится как в отрезке P,так и в отрезке Q. Это отрезок: [66;100]  . Ответ:34.

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 200) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной   x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

p = range(55, 100 + 1)  # Задаём отрезок P
q = range(66, 129 + 1)  # Задаём отрезок Q
r = 10 ** 100  # Длина отрезка A
for a1 in range(1, 200):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 201):  # Перебираем конец отрезка A
        f = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if ((x in p) <= (((x in q) and (x not in a)) <= (x not in p))) == 0:
                f = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if f == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = min(len(a) - 1, r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 34

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

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

На числовой прямой даны два отрезка: P  = [15;50]  и Q =  [35; 60]  . Укажите наибольшую возможную длину промежутка A  , для которого формула

(¬ (x ∈ A ) →  (x ∈ P )) →  ((x ∈ A ) → (x ∈ Q ))

тождественно истинна, то есть принимает значение 1 при любом значении переменной x  .

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

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

Преобразуем данное выражение по законам де Моргана:

(¬ (x ∈ A ) →  (x ∈ P )) →  ((x ∈ A ) → (x ∈ Q ))

((x ∈ A) ∨ (x ∈ P)) →  ((x∈∕ A) ∨ (x ∈ Q))

¬((x ∈ A ) ∨ (x ∈ P )) ∨ ((x ∕∈ A ) ∨ (x ∈ Q ))

(x ∕∈ A ) ∧ (x ∕∈ P ) ∨ (x ∕∈ A ) ∨ (x ∈ Q )

Воспользуемся правилом:

A ∧  B ∨ A =  A ∧ (B ∨ 1) = A

Получим:

(x ∕∈ A ) ∨ (x ∈ Q )

Получается, что x  должен принадлежать Q  , либо не принадлежать A  . Так как мы ищем наибольшую возможную длину A  , необходимо, чтобы он полностью содержался в Q  , т.е. максимальная длина отрезка A =  60 − 35 = 25  .

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора максимальная полученная длина отрезка A  и будет ответом.

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

p = range(15, 50 + 1)  # Задаём отрезок P
q = range(35, 60 + 1)  # Задаём отрезок Q
r = 0  # Наибольшая длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        c = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if (((not (x in a)) <= (x in p)) <= ((x in a) <= (x in q))) == 0:
                c = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if c == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = max(len(a) - 1, r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 25

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

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

На числовой прямой даны два отрезка: D = [139;161]  и B = [149;174]  . Отрезок A  таков, что логическое выражение

(x ∈ D ) → ((¬(x ∈ B)∧ ¬(x ∈ A )) → ¬ (x ∈ D))

истинно при любом значении переменной x  . Какова наименьшая возможная длина отрезка A  ?

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

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

Введем обозначения: D = x ∈ D,  B = x ∈ B  и A = x ∈ A  .

По правилу преобразования импликации и закону де Моргана имеем:

D →  ((¬B ∧ ¬A ) → ¬D ) = ¬D ∨ ((¬B ∧ ¬A ) → ¬D )

¬D ∨ (¬ (¬B  ∧¬A )∨ ¬D ) = ¬D ∨ B ∨ A∨ ¬D  ≡  A∨ ¬D ∨ B

Выражение    ∨
¬D   B  не зависит от A  и истинно, если

x ∈ (− ∞; 139)∪[149;+∞ )

(x  одновременно находится в B  или не в D  ).

PIC

Исходное выражение будет истинно при любых x  , если A  будет содержать в себе все элементы из множества [139;149)  . Значит, наименьшая длина отрезка равна 149− 139 = 10  .

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 200) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки D  и B  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной   x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

d = range(139, 161 + 1)  # Задаём отрезок P
b = range(149, 174 + 1)  # Задаём отрезок B
r = 10 ** 100  # Наименьшая длина отрезка A
for a1 in range(1, 200):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 201):  # Перебираем конец отрезка A
        c = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if ((x in d) <= (((x not in b) and (x not in a)) <= (x not in d))) == 0:
                c = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if c == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = min(len(a), r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 10

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

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

На числовой прямой даны два отрезка: P  = [10;17]  и Q =  [15; 25]  . Укажите наименьшую возможную длину такого отрезка A  , что формула

(x ∈ P ) → (((x ∈ Q) ∧ ¬(x ∈ A )) → ¬ (x ∈ P))

истинна при любом значении переменной x  , т.е. принимает значение 1 при любом значении переменной x  .

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

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

Преобразуем данное выражение по законам де Моргана и закону раскрытия импликации:

¬ (x ∈ P ) ∨ (¬((x ∈ Q ) ∧ ¬ (x ∈ A)) ∧ ¬(x ∈ P ))

¬(x ∈ P ) ∨ ¬ (x ∈ Q) ∨ (x ∈ A )

(x ∕∈ P ) ∨ (x ∕∈ Q ) ∨ (x ∈ A )

Первая и вторая скобка будут ложны только тогда, когда x  принадлежит одновременно и P  , и Q  . Значит, наша задача подобрать такое A  , чтобы оно перекравыло область пересечения этих отрезков. Тогда, наименьшая длина A  = 17 − 15 = 2  .

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

p = range(10, 17 + 1)  # Задаём отрезок P
q = range(15, 25 + 1)  # Задаём отрезок Q
r = 10 ** 100  # Наименьшая длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        c = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if ((x in p) <= (((x in q) and (not (x in a))) <= (not (x in p)))) == 0:
                c = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if c == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = min(len(a) - 1, r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 2

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

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

На числовой прямой даны два отрезка: P  = [5;35]  и Q =  [20; 51]  . Укажите наименьшую возможную длину такого отрезка A  , что формула

(x ∈ P ) → (((x ∈ Q) ∧ ¬(x ∈ A )) → ¬ (x ∈ P))

истинна при любом значении переменной x  , т.е. принимает значение 1 при любом значении переменной x  .

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

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

Преобразуем данное выражение по законам де Моргана:

¬ (x ∈ P ) ∨ (¬((x ∈ Q ) ∧ ¬ (x ∈ A)) ∧ ¬(x ∈ P ))

¬(x ∈ P ) ∨ ¬ (x ∈ Q) ∨ (x ∈ A )

(x ∕∈ P ) ∨ (x ∕∈ Q ) ∨ (x ∈ A )

Первое и второе выражение будут ложны только тогда, когда x  принадлежит одновременно и    P  , и Q  . Значит, наша задача подобрать такое A  , чтобы оно перекравыло область пересечения этих отрезков. Тогда, наименьшая длина A  = 35 − 20 = 15  .

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

p = [i for i in range(5, 36)] # задаем отрезок p
q = [i for i in range(20, 52)] # задаем отрезок q
mn = 10**10
for a1 in range(1, 100): # перебираем начало отрезка а
    for a2 in range(a1 + 1, 101): # перебираем конец отрезка а
        c = 0 # флаг, который будет показывать при всех ли х для текущего отрезка а выражение было истинным
        a = [i for i in range(a1, a2)] # формируем отрезок а
        for x in range(1, 500): # перебираем значения x
            # если при текущем x выражение ложно
            if ((x in p) <= (((x in q) and (x not in a)) <= (x not in p))) == False:
                c = 1 # меняем значение флага
                # и сбрасываем цикл, переходим к следующему отрезку а,
                # так как для данного отрезка а выражение не тождественно истинно
                break
        if c == 0: # если значение флага не менялось, значит, при любом х при данном отрезке а выражение было истинным
            mn = min(len(a)-1,mn) # вычисляем минимальную длину отрезка
print(mn)

Ответ: 15

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

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

На числовой прямой даны два отрезка: P  = [15;50]  и Q =  [35; 60]  . Укажите наибольшую возможную длину промежутка A  , для которого формула

(¬ (x ∈ A ) →  (x ∈ P )) →  ((x ∈ A ) → (x ∈ Q ))

тождественно истинна, то есть принимает значение 1 при любом значении переменной x  .

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

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

Преобразуем данное выражение по законам де Моргана:

(¬ (x ∈ A ) →  (x ∈ P )) →  ((x ∈ A ) → (x ∈ Q ))

((x ∈ A) ∨ (x ∈ P)) →  ((x∈∕ A) ∨ (x ∈ Q))

¬((x ∈ A ) ∨ (x ∈ P )) ∨ ((x ∕∈ A ) ∨ (x ∈ Q ))

(x ∕∈ A ) ∧ (x ∕∈ P ) ∨ (x ∕∈ A ) ∨ (x ∈ Q )

(x ∕∈ A ) ∨ (x ∈ Q )

Получается, что x  должен принадлежать Q  , либо не принадлежать A  . Так как мы ищем наибольшую возможную длину A  , необходимо, чтобы он полностью содержался в Q  , т.е. максимальная длина отрезка A =  60 − 35 = 25  .

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора максимальная полученная длина отрезка A  и будет ответом.

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

p = range(15, 50 + 1)  # Задаём отрезок P
q = range(35, 60 + 1)  # Задаём отрезок Q
r = 0  # Наибольшая длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        c = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if (((not (x in a)) <= (x in p)) <= ((x in a) <= (x in q))) == 0:
                c = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if c == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = max(len(a) - 1, r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 25

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

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

На числовой прямой даны два отрезка: P  = [5;35]  и Q =  [20; 51]  . Укажите наименьшую возможную длину такого отрезка A  , что формула

(x ∈ P ) → (((x ∈ Q) ∧ ¬(x ∈ A )) → ¬ (x ∈ P))

истинна при любом значении переменной x  , т.е. принимает значение 1 при любом значении переменной x  .

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

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

Преобразуем данное выражение по законам де Моргана:

¬ (x ∈ P ) ∨ (¬((x ∈ Q ) ∧ ¬ (x ∈ A)) ∧ ¬(x ∈ P ))

¬(x ∈ P ) ∨ ¬ (x ∈ Q) ∨ (x ∈ A )

(x ∕∈ P ) ∨ (x ∕∈ Q ) ∨ (x ∈ A )

Сделаем отрацание известной части, чтобы найти такие x  при которых исходное выражение дает ложь.

(x ∈ P ) ∧ (x ∈ Q )

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

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

p = range(5, 35 + 1)  # Задаём отрезок P
q = range(20, 51 + 1)  # Задаём отрезок Q
r = 10 ** 100  # Наименьшая длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        c = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if ((x in p) <= (((x in q) and (not (x in a))) <= (not (x in p)))) == 0:
                c = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if c == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = min(len(a) - 1, r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 15

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

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

На числовой прямой даны два отрезка: P  = [10;50]  и Q =  [30; 65]  .Отрезок A таков, что приведённая ниже формула истинна при любом значении переменной x  :

¬(x ∈ A ) → (((x ∈ P ) ∧ (x ∈ Q )) → (x ∈ A ))

Какова наименьшая возможная длина отрезка A  ?

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

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

Преобразуем данное выражение по законам де Моргана:

(x ∈ A ) ∨ (¬(x ∈ P ) ∧ (x ∈ Q )) ∨ A )

¬(x ∈ A ) ∨ ¬ (x ∈ Q) ∨ (x ∈ A)

(x ∕∈ P ) ∨ (x ∕∈ Q ) ∨ A

Первое и второе выражение будут ложны только тогда, когда x  принадлежит одновременно и    P  , и Q  . Значит, наша задача подобрать такое A  , чтобы оно перекравыло область пересечения этих отрезков. Тогда, наименьшая длина A  = 50 − 30 = 20  .

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

p = range(10, 50 + 1)  # Задаём отрезок P
q = range(30, 65 + 1)  # Задаём отрезок Q
r = 10 ** 100  # Наименьшая длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        c = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if ((x in p) <= (((x in q) and (not (x in a))) <= (not (x in p)))) == 0:
                c = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if c == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = min(len(a) - 1, r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 20

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

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

На числовой прямой даны два отрезка: P = [25;36]  и Q = [28;55].  Укажите минимальную длину промежутка A,  что формула

(x ∈ A)∨ (x ∈ Q )∨(x ∕∈ P)

истинна при любом значении переменной x,  т.е. принимает значение 1  при любом значении переменной x  .

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

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

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

(
|| x ∕∈ A
|{
| x ∕∈ Q
||(
  x ∈ P

Враги хотят, чтобы x  был одновременно не в Q  и в P  . Такой промежуток — [25;28)  . Тогда мечты врагов такие: «Вот бы промежуток [25;28)  был не в A  ».

Чтобы победить, друзья подберут такой A  , который гарантированно будет содержать промежуток [25;28)  и будет как можно меньше. Наименьшая длина такого промежутка равна 28− 25 = 3  .

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка       A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

p = range(25, 36 + 1)  # Задаём отрезок P
q = range(28, 55 + 1)  # Задаём отрезок Q
r = 10 ** 100  # Длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        f = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if ((x in a) or (x in q) or (not (x in p))) == 0:
                f = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if f == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = min(len(a), r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 3

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

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

На числовой прямой даны два отрезка: P = [20,50]  и Q = [30,40]  . Найдите наименьшую возможную длину отрезка     A  , при котором формула

-------   -----------------
(x ∈ A ) → ((x ∈ P)∨ (x ∈ Q ))

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

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

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

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

(x ∈ A )∨ ((x ∕∈ P )∧ (x ∕∈ Q))  .

Сделаем отрицание известной части: (x ∈ P )∨ (x ∈ Q)  .

Истина для отрицаемой части достигается, если x ∈ [20;50]  . Для этих x  исходное выражение будет истинно только тогда, когда истинно будет выражение (x ∈ A )  с этими x  . Значит, A = [20;50]  и длина A = 50− 20 = 30  .

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка       A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

p = range(20, 50 + 1)  # Задаём отрезок P
q = range(30, 40 + 1)  # Задаём отрезок Q
r = 10 ** 100  # Наименьшая длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        c = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if ((not (x in a)) <= (not ((x in p) or (x in q)))) == 0:
                c = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if c == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = min(len(a) - 1, r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 30

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

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

На числовой прямой даны два отрезка: P = [11,28]  и Q = [15,35]  . Найдите наибольшую возможную длину отрезка     A  , при котором формула

         ------------------
(x ∈ A )∧ ((x ∕∈ P) → (x ∈ Q ))

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

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

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

Первым шагом раскроем импликацию и отрицания:

(x ∈ A )∧ ((x ∕∈ P )∧ (x ∕∈ Q))

Инвертируем известную часть, чтобы понять при каких x  она дает истину:

((x ∈ P )∨ (x ∈ Q))

Это выражение ложно (а исходное соответственно истино), когда x  не принадлежит ни отрезку Q  ни отрезку P  , и не им одновременно. Это выполняется при x ∕∈ [11;35]  Тогда, чтобы исходное выражение давало ложь, необходимо чтобы отрезок A полностью лежал в области [11;35]  . Поскольку в задании проясят найти максимальную длину отрезка A, то A = [11;35]  . Его длина равна 35− 11 = 24  .

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт ложь. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора максимальная полученная длина отрезка A  и будет ответом.

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

p = range(11, 28 + 1)  # Задаём отрезок P
q = range(15, 35 + 1)  # Задаём отрезок Q
r = 0  # Наибольшая длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        c = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт истину (1), то
            if ((x in a) and (not((x not in p) <= (x in q)))) == 1:
                c = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if c == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = max(len(a) - 1, r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 24

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

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

На числовой прямой даны три отрезка: P = [20,30]  , Q = [5,15]  и C = [35,50]  . Какова наименьшая длина отрезка    A  , при котором формула

                    -------
((x ∈ P) → (x ∈ Q )) ∨((x ∈ A ) → (x ∈ C ))

тождественно истинна, то есть принимает значение 1 при любом значении переменной x  ?

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

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

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

(x∈∕P )∨ (x ∈ Q)∨ (x ∈ A )∨ (x ∈ C)

Сделаем отрицание известной части: (x ∈ P )∧ (x ∕∈ Q)∧ (x∈∕C )

Отрицаемое выражение будет истинно, если x  будет одновременно в P  , не в Q  , не в C  . Это отрезок [20;30]  .

Чтобы выражение было истинным для найденных x  , скобка (x ∈ A)  для них давать истину. Тогда A = [20;30]  и длина A = 30− 20 = 10  .

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  , Q  и C  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка       A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

p = range(20, 30 + 1)  # Задаём отрезок P
q = range(5, 15 + 1)  # Задаём отрезок Q
c = range(35, 50 + 1)  # Задаём отрезок C
r = 10 ** 100  # Длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        f = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if (((x in p) <= (x in q)) or ((x not in a) <= (x in c))) == 0:
                f = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if f == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = min(len(a) - 1, r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 10

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

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

На числовой прямой даны два отрезка: P = [8;12]  и Q = [4;30]  . Укажите наибольшую возможную длину промежутка A  , для которого формула

                    -------
((x ∈ P) ≡ (x ∈ Q)) → (x ∈ A)

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

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

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора максимальная полученная длина отрезка A  и будет ответом.

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

p = range(8, 12 + 1)  # Задаём отрезок P
q = range(4, 30 + 1)  # Задаём отрезок Q
r = 0  # Длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        f = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if (((x in p) == (x in q)) <= (x not in a)) == 0:
                f = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if f == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = max(len(a), r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 18

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

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

На числовой прямой даны два отрезка: P = [0;10]  и Q = [25;50]  . Укажите наименьшую возможную длину промежутка A  , для которого формула

(x ∕∈ A ) → ((x ∕∈ P)∧ (x ∕∈ Q ))

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

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

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

Первым шагом раскроем импликацию:

(x ∈ A)∨ ((x ∕∈ P )∧(x ∕∈ Q))

Инвертируем известную часть, чтобы найти те иксы, при которых исходное выражение будет ложно.

(x ∈ P) ∨(x ∈ Q )

Отсюда следует, что выражение ложно когда x  принадлежит или отрезку P  или отрезку Q  . Тогда, отрезок   A  должен содержать все иксы, принадлежащие этим отрезкам. Наименьшим таким отрезком будет [0; 50]. Его длина 50 − 0 = 50  .

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка       A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

p = range(0, 10 + 1)  # Задаём отрезок P
q = range(25, 50 + 1)  # Задаём отрезок Q
r = 10 ** 100  # Длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        f = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if ((x not in a) <= ((x not in p) and (x not in q))) == 0:
                f = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if f == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = min(len(a), r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 50

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

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

На числовой прямой даны два отрезка: P = [25;36]  и Q = [28;55].  Укажите минимальное количество целых точек на промежутке A,  что формула

(x ∈ A)∨ (x ∈ Q )∨(x ∕∈ P)

истинна при любом значении переменной x,  т.е. принимает значение 1 при любом значении переменной x.

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

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка       A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

p = range(25, 36 + 1)  # Задаём отрезок P
q = range(28, 55 + 1)  # Задаём отрезок Q
r = 10 ** 100  # Длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        f = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if ((x in a) or (x in q) or (x not in p)) == 0:
                f = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if f == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = min(len(a), r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 3

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

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

На числовой прямой даны два отрезка: P = [15;33]  и Q = [45;68]  . Укажите наибольшую возможную длину промежутка A  , для которого формула

         -------
((x ∈ A )∧(x ∈ Q)) → ((x ∈ P)∨ (x ∈ Q ))

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

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

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора максимальная полученная длина отрезка A  и будет ответом.

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

p = range(15, 33 + 1)  # Задаём отрезок P
q = range(45, 68 + 1)  # Задаём отрезок Q
r = 0  # Длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        f = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if (((x in a) and (x not in q)) <= ((x in p) or (x in q))) == 0:
                f = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if f == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = max(len(a) - 1, r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран


Ответ: 23

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

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

На числовой прямой даны отрезки A = [70;90],B = [40;60]  и C = [0;N]  и функция

F (x) = (¬(x ∈ A ) → (x ∈ B ))∧ (¬ (x ∈ C) → (x ∈ A))

При каком наименьшем числе N  функция F (x)  истинна более чем для 30  целых чисел x  ?

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

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

Идея заключается в переборе возможных концов отрезка C  (от 1 до 1000) и проверке, что исходное выражение даёт истину более чем для 30 значений переменной x  (от 1 до 1000). Если во время проверки найдётся хотя бы одно значение n  , при котором выражение выполняется для 31 и более x  , данное число выводится на экран, а цикл останавливается – так мы найдём минимальное значение.

Для реализации этой идеи необходимо задать отрезки A  и B  при помощи функции range(). Далее, создадим цикл for, необходимый для перебора значений концов отрезка C  . При каждой итерации будем создавать переменную-счётчик, которая изначально равна 0, а затем задавать отрезок C  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение истинно для текущего значения x  , то к счётчику прибавляется 1. Если после перебора всех значений count > 30, значит проверяемый конец отрезка C  удовлетворяет условию: выводим его на экран и останавливаем цикл.

a = range(70, 90 + 1)  # Задаём отрезок A
b = range(40, 60 + 1)  # Задаём отрезок B
for n in range(1, 1000):  # Перебираем конец отрезка C
    c = range(0, n + 1)  # Задаём отрезок C
    count = 0  # Количество значений x, при которых выражение даёт истину
    for x in range(1000):
        # Если при текущем значении переменной x выражение даёт истину (0), то
        if ((x not in a) <= (x in b)) and ((x not in c) <= (x in a)):
            count += 1  # прибавляем 1 к count
    if count > 30:  # Если выражение истинно более чем для 30 целых x,
        print(n)  # выводим ответ на экран и останавливаем цикл
        break

Ответ: 49

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

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

На числовой прямой даны отрезки A = [30;50],B = [40;46] и C = [N;61]  и функция

F(x) = (¬(x ∈ B ) → ¬(x ∈ A ))∧ (¬(x ∈ C ) → (x ∈ B))

При каком наибольшем числе N  функция F (x)  истинна более чем для 25  целых чисел x  ?

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

Идея заключается в переборе возможных начал отрезка C  (от 1 до 1000) и проверке, что исходное выражение даёт истину более чем для 25 значений переменной x  (от 1 до 1000).

Для реализации этой идеи необходимо задать отрезки A  и B  при помощи функции range(), а также ввести переменную r  , равную 0: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начал отрезка C  . При каждой итерации будем создавать переменную-счётчик, которая изначально равна 0, а затем задавать отрезок C  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение истинно для текущего значения x  , то к счётчику прибавляется 1. Если после перебора всех значений count > 25, значит проверяемое число N  удовлетворяет условию: присваиваем его r  , если он больше текущего значения данной переменной.

a = range(30, 50 + 1)  # Задаём отрезок A
b = range(40, 46 + 1)  # Задаём отрезок B
r = 0  # Подходящее число N
for n in range(1, 1000):  # Перебираем конец отрезка C
    c = range(n, 61 + 1)  # Задаём отрезок C
    count = 0  # Количество значений x, при которых выражение даёт истину
    for x in range(1000):
        # Если при текущем значении переменной x выражение даёт истину (0), то
        if ((x not in b) <= (x not in a)) and ((x not in c) <= (x in b)):
            count += 1  # прибавляем 1 к count
    if count > 25:  # Если выражение истинно более чем для 30 целых x,
        r = max(n, r)  # выводим ответ на экран и останавливаем цикл
print(r)

Ответ: 22

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

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

На числовой прямой даны два отрезка: P = [43;49]  и Q = [46;55]  . Укажите наибольшую возможную длину такого отрезка A  , что формула

((x ∈ A ) → (x ∈ P))∨ (x ∈ Q)

тождественно истинна, то есть принимает значение 1  при любом значении переменной x  .

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

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

Запишем, чего хотят враги:

(
|||{x ∈ A
 x ∕∈ P
|||
(x ∕∈ Q

Значит, враги будут подбирать x  , который не принадлежит отрезкам [43;49]  и [46;55]  , то есть они будут использовать x ∈ (− ∞; 43)∪ (55;+ ∞)

Друзья же хотят, чтобы x  не принадлежал A  , тогда A ∕∈ (− ∞; 43)∪ (55;+ ∞ ) => A ∈ [43;55]

Это и есть отрезок максимальной длины, равной 12  .

Решение 2 (прогой):

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора максимальная полученная длина отрезка A  и будет ответом.

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

p = range(43, 49 + 1)  # Задаём отрезок P
q = range(46, 55 + 1)  # Задаём отрезок Q
r = 0  # Длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        f = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if (((x in a) <= (x in p)) or (x in q)) == 0:
                f = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if f == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = max(len(a) - 1, r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

Ответ: 12

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

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

На числовой прямой даны два отрезка: P = [10;29] и Q = [13;18]  . Какова наименьшая возможная длина промежутка      A  , что формула

((x∈∕A ) → (x ∕∈ P))∨ (x ∈ Q)

тождественно истинна, то есть принимает значение 1  при любом значении переменной   .

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

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

Выпишем игру за врагов. Понимаем, что врагам удовлетворяет, чтобы отрезок A  был в 13-18, и враги будут брать свои x  в 10-13 и 18-29.

Чтобы перекрыть и не оставить шанса врагам на победу - друзьям нужно перекрыть отрезки 10-13 и 18-29. У них нет другого выбора, кроме как взять отрезок A  равным 10-29.

Длина тут находится как: 29− 10 = 19  .

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

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка       A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

p = range(10, 29 + 1)  # Задаём отрезок P
q = range(13, 18 + 1)  # Задаём отрезок Q
r = 10 ** 100  # Длина отрезка A
for a1 in range(1, 100):  # Перебираем начало отрезка A
    for a2 in range(a1 + 1, 101):  # Перебираем конец отрезка A
        f = 0  # Флаг, указывающий на истинность выражения при любых значениях переменной x
        a = range(a1, a2)  # Задаём отрезок A
        for x in range(1, 1000):  # Перебираем значения переменной x
            # Если при текущем значении переменной x выражение даёт ложь (0), то
            if (((x not in a) <= (x not in p)) or (x in q)) == 0:
                f = 1  # меняем значение флага на 1,
                break  # останавливаем цикл и переходим к следующему отрезку A
        if f == 0:  # Если значение флага не менялось, значит текущий отрезок A подходит
            r = min(len(a) - 1, r)  # Сравниваем длину отрезка A с переменной r
print(r)  # Выводим ответ на экран

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