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

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

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

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

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

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

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

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

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

Это выражение истино (а исходное соответственно ложно), когда x  не принадлежит отрезку Q  , и не принадлежит отрезку P  одновременно. Это будут x ∈ (− ∞; 5)∪ (23;+ ∞ )  . Чтобы исходное выражение было истино при любом   x  необходимо «перекрыть» областью ¬A  как минимум эту область. Тогда отрезок A  будет [5;23]  или меньне, но в этих границах. Так как в задании просят найти максимальную длину, то A = [5;23]  , а его длина 23 − 5 = 18  .

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

p = {i for i in range(5, 18)}
q = {i for i in range(13, 24)}
ans = []
for a1 in range(1, 50):
    for a2 in range(a1 + 1, 51):
        f = 0
        for x in range(1, 51):
            if (((a1 <= x <= a2) <= (x in p)) or (x in q)) == False:
                f=1
                break
        if f == 0:
            ans += [a2 - a1]
print(max(ans))

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

# функция, которая проверяет, принадлежит ли x отрезку
def F(start, end, x):
    if start <= x <= end:
        return True
    else:
        return False

lens = []
# левая граница искомого отрезка
for a in range(1, 500+1):
    # правая граница искомого отрезка
    for b in range(a, 500+1):
        f = 0
        for x in range(1, 1000):
            if ((F(a, b, x) <= F(5, 17, x)) or F(13, 23, x)) == False:
                f = 1
                break
        if f == 0:
            # добавляем длину отрезка в массив
            lens.append(b-a)
print(max(lens))

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