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

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

((x ∈ A ) → (x2 ≤ 100))∧ ((y2 ≤ 25) → (y ∈ A))

тождественно истинна при любых вещественных x  и y  . Какую наименьшую длину может иметь отрезок A  ?

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

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

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

PIC

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

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

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

# Так как по задаче числа - вещественные,
# то будем делать перебор с точностью до 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 <= 100)) and ((y**2 <= 25) <= (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))

print(minLen)

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