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

На числовой прямой даны отрезки P = [10;50],Q = [30;65]  и функция

      ------- F(x) = (x ∈ A ) → (((x ∈ P )∧ (x ∈ Q)) → (x ∈ A))

При какой наименьшей возможной длине отрезка A  функция F (x)  истинна при любом значении переменной x  ?

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

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

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

Тогда мечты врагов такие: «Вот бы x  одновременно принадлежал P  и Q  и не принадлежал A  ». То есть, враги хотят, чтобы отрезок [30;50]  не принадлежал A  .

Тогда друзья говорят: «Весь отрезок [30;50]  принадлежит A  ». Значит, наименьшая длина отрезка A  равна 20  .

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

p = [i for i in range(10, 51)] # задаем отрезок p
q = [i for i in range(30, 66)] # задаем отрезок 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 not in a) <= (((x in p) and (x in q)) <= (x in a))) == False:
                c = 1 # меняем значение флага
                # и сбрасываем цикл, переходим к следующему отрезку а,
                # так как для данного отрезка а выражение не тождественно истинно
                break
        if c == 0: # если значение флага не менялось, значит, при любом х при данном отрезке а выражение было истинным
            mn = min(len(a)-1,mn) # вычисляем минимальную длину отрезка
print(mn)

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