Задача к ЕГЭ по информатике на тему «отрезки» №2

На числовой прямой даны два отрезка: N  = [100,180]  и M = [145,200]  . Укажите наименьшую возможную длину отрезка А для которого выражение

(x ∈ N ) − → (((x ∈ M )∧ ¬(x ∈ A)) − → ¬(x ∈ N ))

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

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

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

(x∈∕N )∨ (x ∕∈ M )∨ (x ∈ A )∨(x ∕∈ N)

Уберем повторяющуюся часть (x ∕∈ N)  :

(x ∕∈ N) ∨(x ∕∈ M ) ∨(x ∈ A )

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

(x ∈ N )∧(x ∈ M )

Это выражение истино (а исходное соответственно ложно), когда x  принадлежит отрезку N  , и принадлежит отрезку M  одновременно. Это будут x ∈ [145;180]  . Чтобы исходное выражение было истинно при любом x  , необходимо «перекрыть» отрезком A  как минимум эту область. Тогда отрезок A  будет [145;180]  или больше. Так как в задании просят найти минимальную длину, то A = [145;180]  , а его длина 180 − 145 = 35  .

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

n = [i for i in range(100, 181)]
m = [i for i in range(145, 201)]

mn = 10 ** 10
for a1 in range(1, 250):
    for a2 in range(a1, 251):
        f = 0
        a = [i for i in range(a1, a2)]
        for x in range(1, 400):
            if ((x in n) <= (((x in m) and (x not in a)) <= (x not in n))) == False:
                f = 1
                break
        if f == 0:
            # -1, потому что мы считаем длину,
            # т.е. количество "дорог" между точками(целыми числами),
            mn = min(len(a)-1, mn)
print(mn)

Ответ: 35
Оцените статью
Я решу все!