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

На числовой прямой задан отрезок А. Известно, что формула

((x ∈ A) → (x2 ≤ 81))∧ ((y2 ≤ 36) → (y ∈ A ))

тождественно истинна при любых вещественных x и y. Найдите наибольшую и наименьшую длины, которые может иметь отрезок А? В ответе укажите разницу между этими числами.

Аналитическое решение

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

((x ∕∈ A)∨ (x2 ≤ 81))∧ ((y2 > 36) ∨(y ∈ A )) » class=»math-display» src=»/images/inform/reshen/reshen-4215-1.svg» width=»auto»></div>
<p class= Нарисуем полученные неравенства на числовых осях:

PIC

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

Так как (x ∕∈ A)  и (y ∈ A)  , то наименьший отрезок, которым может быть A  это [-6; 6]. Так как если сделать его еще меньше, то будут точки на оси y  для которых выражение не будет являться истиной. Длина этого отрезка – 12.

Наибольший отрезок, которым может быть A  это [-9; 9]. Так как если сделать его еще больше, то будут точки на оси x  для которых выражение не будет являться истиной. Длина этого отрезка – 18.

Остается только найти разницу между этими числами: 18 − 12 = 6  .

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

minLen = 10**10  # Наименьшая длина отрезка A
maxLen = 0 # Наибольшая длина отрезка A

# Так как по задаче числа - вещественные,
# то будем делать перебор с точностью до 0.25.

# Для этого нужно перебирать целые числа (заранее умноженные на 4),
# а затем делить на 4. Это нужно, так как range перебирает только целые числа.

# Представим отрезок A = [a; b]
for a in range(-30, 30):
    for b in range(a, 30):
        ok = 1  # Создадим переменную-флаг
        # Если она будет равна 1, то отрезок подходит
        # Если она изменится и станет равна 0, то отрезок не подходит

        # Делаем перебор x,y в пределах отрезка А
        for x in range(-30*4, 30*4 + 1):
            x /= 4
            for y in range(-30*4, 30*4 + 1):
                y /= 4
                # (x принадлежит отрезку А=[a;b]) равносильно выполнению неравенства (a <= x <= b)
                F = ((a <= x <= b) <= (x**2 <= 81)) and ((y**2 <= 36) <= (a <= y <= b))
                if F == 0:  # Если условие нарушается
                    ok = 0  # Изменяем переменную-флаг
                    break  # Выходим из текущего цикла перебора y

            if ok == 0:  # Условие оказалось нарушено
                break # Прекращаем перебор x

        # Если по итогу перебора x и y
        # Переменная-флаг осталась быть равна 1
        if ok == 1:
            # Пробуем сохранить длину, как минимальную и максимальную
            minLen = min(minLen, (b - a))
            maxLen = max(maxLen, (b - a))

print(maxLen - minLen) # Выводим разность

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