15.05 Отрезки
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: = [55;100],
= [66;129]. Укажите наименьшую возможную длину такого
отрезка
, что формула
истинна, т.е. принимает значение 1 при любом значении переменной .
Решение руками
В начале для удобства заменим некоторые выражения:
Тогда выражение примет такой вид:
Заменим импликацию на отрицание первого или второе. Выражение будет выглядеть следующим образом:
Раскроем отрицание в скобке. Теперь выражение имеет такой вид:
Избавимся от повторяющейся Р под отрицанием и получим окончательное упрощенное выражение:
Как можем заметить, нам нужно найти значения x когда выражение равно истине, при этом только А должна
равняться единице, а все остальные – 0. Не P и Не Q будут равны 0, когда х будут находиться в пределах отрезков P и
Q. Получается, нас интересует отрезок, который находится как в отрезке P,так и в отрезке Q. Это отрезок: .
Ответ:34.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 200) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно
значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения
перебора минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать
отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
.
Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается.
Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего
отрезка
: присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ
выводится на экран.
p = range(55, 100 + 1) # Задаём отрезок P q = range(66, 129 + 1) # Задаём отрезок Q r = 10 ** 100 # Длина отрезка A for a1 in range(1, 200): # Перебираем начало отрезка A for a2 in range(a1 + 1, 201): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if ((x in p) <= (((x in q) and (x not in a)) <= (x not in p))) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наибольшую возможную
длину промежутка
, для которого формула
тождественно истинна, то есть принимает значение 1 при любом значении переменной
.
Решение руками
Преобразуем данное выражение по законам де Моргана:
Воспользуемся правилом:
Получим:
Получается, что должен принадлежать
, либо не принадлежать
. Так как мы ищем
наибольшую возможную длину
, необходимо, чтобы он полностью содержался в
, т.е.
максимальная длина отрезка
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех
значениях переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки
найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению
нового отрезка. После завершения перебора максимальная полученная длина отрезка
и будет
ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а
также ввести переменную
, равную 0: в неё будет записан наш ответ. Далее создадим цикл for,
необходимый для перебора значений начала отрезка
. Внутри него, с помощью того же цикла,
организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать
переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи
функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а
последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0,
значит выражение тождественно истинно для текущего отрезка
: присваиваем его длину
, если она больше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(15, 50 + 1) # Задаём отрезок P q = range(35, 60 + 1) # Задаём отрезок Q r = 0 # Наибольшая длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A c = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((not (x in a)) <= (x in p)) <= ((x in a) <= (x in q))) == 0: c = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if c == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = max(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Отрезок
таков, что логическое
выражение
истинно при любом значении переменной . Какова наименьшая возможная длина отрезка
?
Решение руками
Введем обозначения:
и
.
По правилу преобразования импликации и закону де Моргана имеем:
Выражение не зависит от
и истинно, если
( одновременно находится в
или не в
).
Исходное выражение будет истинно при любых , если
будет содержать в себе все элементы из множества
. Значит, наименьшая длина отрезка равна
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 200) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно
значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения
перебора минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать
отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
.
Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается.
Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего
отрезка
: присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ
выводится на экран.
d = range(139, 161 + 1) # Задаём отрезок P b = range(149, 174 + 1) # Задаём отрезок B r = 10 ** 100 # Наименьшая длина отрезка A for a1 in range(1, 200): # Перебираем начало отрезка A for a2 in range(a1 + 1, 201): # Перебираем конец отрезка A c = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if ((x in d) <= (((x not in b) and (x not in a)) <= (x not in d))) == 0: c = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if c == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a), r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наименьшую возможную
длину такого отрезка
, что формула
истинна при любом значении переменной , т.е. принимает значение 1 при любом значении
переменной
.
Решение руками
Преобразуем данное выражение по законам де Моргана и закону раскрытия импликации:
Первая и вторая скобка будут ложны только тогда, когда принадлежит одновременно и
, и
. Значит, наша задача подобрать такое
, чтобы оно перекравыло область пересечения этих
отрезков. Тогда, наименьшая длина
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех
значениях переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки
найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению
нового отрезка. После завершения перебора минимальная полученная длина отрезка
и будет
ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а
также ввести переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for,
необходимый для перебора значений начала отрезка
. Внутри него, с помощью того же цикла,
организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать
переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи
функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а
последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0,
значит выражение тождественно истинно для текущего отрезка
: присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(10, 17 + 1) # Задаём отрезок P q = range(15, 25 + 1) # Задаём отрезок Q r = 10 ** 100 # Наименьшая длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A c = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if ((x in p) <= (((x in q) and (not (x in a))) <= (not (x in p)))) == 0: c = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if c == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наименьшую возможную
длину такого отрезка
, что формула
истинна при любом значении переменной , т.е. принимает значение 1 при любом значении
переменной
.
Решение руками
Преобразуем данное выражение по законам де Моргана:
Первое и второе выражение будут ложны только тогда, когда принадлежит одновременно и
, и
. Значит, наша задача подобрать такое
, чтобы оно перекравыло область пересечения этих
отрезков. Тогда, наименьшая длина
.
Решение программой
p = [i for i in range(5, 36)] # задаем отрезок p q = [i for i in range(20, 52)] # задаем отрезок 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 in p) <= (((x in q) and (x not in a)) <= (x not in p))) == False: c = 1 # меняем значение флага # и сбрасываем цикл, переходим к следующему отрезку а, # так как для данного отрезка а выражение не тождественно истинно break if c == 0: # если значение флага не менялось, значит, при любом х при данном отрезке а выражение было истинным mn = min(len(a)-1,mn) # вычисляем минимальную длину отрезка print(mn)
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наибольшую возможную
длину промежутка
, для которого формула
тождественно истинна, то есть принимает значение 1 при любом значении переменной .
Решение руками
Преобразуем данное выражение по законам де Моргана:
Получается, что должен принадлежать
, либо не принадлежать
. Так как мы ищем
наибольшую возможную длину
, необходимо, чтобы он полностью содержался в
, т.е.
максимальная длина отрезка
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех
значениях переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки
найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению
нового отрезка. После завершения перебора максимальная полученная длина отрезка
и будет
ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а
также ввести переменную
, равную 0: в неё будет записан наш ответ. Далее создадим цикл for,
необходимый для перебора значений начала отрезка
. Внутри него, с помощью того же цикла,
организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать
переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи
функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а
последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0,
значит выражение тождественно истинно для текущего отрезка
: присваиваем его длину
, если она больше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(15, 50 + 1) # Задаём отрезок P q = range(35, 60 + 1) # Задаём отрезок Q r = 0 # Наибольшая длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A c = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((not (x in a)) <= (x in p)) <= ((x in a) <= (x in q))) == 0: c = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if c == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = max(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наименьшую возможную
длину такого отрезка
, что формула
истинна при любом значении переменной , т.е. принимает значение 1 при любом значении
переменной
.
Решение руками
Преобразуем данное выражение по законам де Моргана:
Сделаем отрацание известной части, чтобы найти такие при которых исходное выражение дает
ложь.
Отсюда следует, что выражение будет ложным только тогда, когда принадлежит одновременно и
, и
. Значит, наша задача подобрать такое
, чтобы оно перекравыло область пересечения этих
отрезков. Тогда, наименьшая длина
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех
значениях переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки
найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению
нового отрезка. После завершения перебора минимальная полученная длина отрезка
и будет
ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а
также ввести переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for,
необходимый для перебора значений начала отрезка
. Внутри него, с помощью того же цикла,
организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать
переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи
функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а
последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0,
значит выражение тождественно истинно для текущего отрезка
: присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(5, 35 + 1) # Задаём отрезок P q = range(20, 51 + 1) # Задаём отрезок Q r = 10 ** 100 # Наименьшая длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A c = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if ((x in p) <= (((x in q) and (not (x in a))) <= (not (x in p)))) == 0: c = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if c == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
.Отрезок A таков, что приведённая
ниже формула истинна при любом значении переменной
:
Какова наименьшая возможная длина отрезка ?
Решение руками
Преобразуем данное выражение по законам де Моргана:
Первое и второе выражение будут ложны только тогда, когда принадлежит одновременно и
, и
. Значит, наша задача подобрать такое
, чтобы оно перекравыло область пересечения этих
отрезков. Тогда, наименьшая длина
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех
значениях переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки
найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению
нового отрезка. После завершения перебора минимальная полученная длина отрезка
и будет
ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а
также ввести переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for,
необходимый для перебора значений начала отрезка
. Внутри него, с помощью того же цикла,
организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать
переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи
функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а
последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0,
значит выражение тождественно истинно для текущего отрезка
: присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(10, 50 + 1) # Задаём отрезок P q = range(30, 65 + 1) # Задаём отрезок Q r = 10 ** 100 # Наименьшая длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A c = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if ((x in p) <= (((x in q) and (not (x in a))) <= (not (x in p)))) == 0: c = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if c == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
Укажите минимальную длину промежутка
что
формула
истинна при любом значении переменной т.е. принимает значение
при любом значении переменной
.
Решение руками
Составим систему для врагов:
Враги хотят, чтобы был одновременно не в
и в
. Такой промежуток —
. Тогда мечты врагов такие:
«Вот бы промежуток
был не в
».
Чтобы победить, друзья подберут такой , который гарантированно будет содержать промежуток
и будет
как можно меньше. Наименьшая длина такого промежутка равна
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора
минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если
выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если
после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка
:
присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(25, 36 + 1) # Задаём отрезок P q = range(28, 55 + 1) # Задаём отрезок Q r = 10 ** 100 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if ((x in a) or (x in q) or (not (x in p))) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a), r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Найдите наименьшую возможную длину отрезка
,
при котором формула
тождественно истинна, то есть принимает значение при любых
.
Решение руками
Раскроем импликацию и упростим выражение:
.
Сделаем отрицание известной части: .
Истина для отрицаемой части достигается, если . Для этих
исходное выражение будет истинно только
тогда, когда истинно будет выражение
с этими
. Значит,
и длина
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора
минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если
выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если
после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка
:
присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(20, 50 + 1) # Задаём отрезок P q = range(30, 40 + 1) # Задаём отрезок Q r = 10 ** 100 # Наименьшая длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A c = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if ((not (x in a)) <= (not ((x in p) or (x in q)))) == 0: c = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if c == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Найдите наибольшую возможную длину отрезка
,
при котором формула
тождественно ложна, то есть принимает значение при любых
.
Решение руками
Первым шагом раскроем импликацию и отрицания:
Инвертируем известную часть, чтобы понять при каких она дает истину:
Это выражение ложно (а исходное соответственно истино), когда не принадлежит ни отрезку
ни отрезку
, и не им одновременно. Это выполняется при
Тогда, чтобы исходное
выражение давало ложь, необходимо чтобы отрезок A полностью лежал в области
. Поскольку в
задании проясят найти максимальную длину отрезка A, то
. Его длина равна
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт ложь. Если во время проверки найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора
максимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также
ввести переменную
, равную 0: в неё будет записан наш ответ. Далее создадим цикл for, необходимый
для перебора значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор
значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая
изначально равна 0, а затем задавать отрезок
при помощи функции range(). Внутри нижнего цикла
необходимо начать перебор значений переменной
. Если выражение даёт истину хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех
значений флаг остаётся равным 0, значит выражение тождественно ложно для текущего отрезка
:
присваиваем его длину
, если она больше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(11, 28 + 1) # Задаём отрезок P q = range(15, 35 + 1) # Задаём отрезок Q r = 0 # Наибольшая длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A c = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт истину (1), то if ((x in a) and (not((x not in p) <= (x in q)))) == 1: c = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if c == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = max(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны три отрезка: ,
и
. Какова наименьшая длина отрезка
,
при котором формула
тождественно истинна, то есть принимает значение 1 при любом значении переменной ?
Решение руками
Раскроем импликацию и упростим выражение:
Сделаем отрицание известной части:
Отрицаемое выражение будет истинно, если будет одновременно в
, не в
, не в
. Это отрезок
.
Чтобы выражение было истинным для найденных , скобка
для них давать истину. Тогда
и
длина
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора
минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки ,
и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если
выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если
после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка
:
присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(20, 30 + 1) # Задаём отрезок P q = range(5, 15 + 1) # Задаём отрезок Q c = range(35, 50 + 1) # Задаём отрезок C r = 10 ** 100 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((x in p) <= (x in q)) or ((x not in a) <= (x in c))) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наибольшую возможную длину промежутка
, для которого формула
тождественно истинна (т.е. принимает значение 1 при любых значениях переменной ).
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора
максимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 0: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений
начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При
каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи
функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если выражение ложно хотя
бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора
всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка
:
присваиваем его длину
, если она больше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(8, 12 + 1) # Задаём отрезок P q = range(4, 30 + 1) # Задаём отрезок Q r = 0 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((x in p) == (x in q)) <= (x not in a)) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = max(len(a), r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наименьшую возможную длину промежутка
, для которого формула
тождественно истинна (т.е. принимает значение 1 при любых значениях переменной ).
Решение руками
Первым шагом раскроем импликацию:
Инвертируем известную часть, чтобы найти те иксы, при которых исходное выражение будет ложно.
Отсюда следует, что выражение ложно когда принадлежит или отрезку
или отрезку
. Тогда, отрезок
должен содержать все иксы, принадлежащие этим отрезкам. Наименьшим таким отрезком будет [0; 50]. Его длина
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора
минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если
выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если
после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка
:
присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(0, 10 + 1) # Задаём отрезок P q = range(25, 50 + 1) # Задаём отрезок Q r = 10 ** 100 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if ((x not in a) <= ((x not in p) and (x not in q))) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a), r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
Укажите минимальное количество целых точек на
промежутке
что формула
истинна при любом значении переменной т.е. принимает значение 1 при любом значении переменной
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора
минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если
выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если
после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка
:
присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(25, 36 + 1) # Задаём отрезок P q = range(28, 55 + 1) # Задаём отрезок Q r = 10 ** 100 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if ((x in a) or (x in q) or (x not in p)) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a), r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наибольшую возможную длину промежутка
, для которого формула
тождественно истинна (т.е. принимает значение 1 при любых значениях переменной ).
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора
максимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 0: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений
начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При
каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи
функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если выражение ложно хотя
бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора
всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка
:
присваиваем его длину
, если она больше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(15, 33 + 1) # Задаём отрезок P q = range(45, 68 + 1) # Задаём отрезок Q r = 0 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((x in a) and (x not in q)) <= ((x in p) or (x in q))) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = max(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны отрезки и
и функция
При каком наименьшем числе функция
истинна более чем для
целых чисел
?
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 1000) и проверке, что исходное выражение даёт
истину более чем для 30 значений переменной
(от 1 до 1000). Если во время проверки найдётся хотя бы одно значение
, при котором выражение выполняется для 31 и более
, данное число выводится на экран, а цикл останавливается –
так мы найдём минимальное значение.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(). Далее, создадим цикл for,
необходимый для перебора значений концов отрезка
. При каждой итерации будем создавать переменную-счётчик,
которая изначально равна 0, а затем задавать отрезок
при помощи функции range(). Внутри нижнего цикла необходимо
начать перебор значений переменной
. Если выражение истинно для текущего значения
, то к счётчику прибавляется
1. Если после перебора всех значений count > 30, значит проверяемый конец отрезка
удовлетворяет условию: выводим
его на экран и останавливаем цикл.
a = range(70, 90 + 1) # Задаём отрезок A b = range(40, 60 + 1) # Задаём отрезок B for n in range(1, 1000): # Перебираем конец отрезка C c = range(0, n + 1) # Задаём отрезок C count = 0 # Количество значений x, при которых выражение даёт истину for x in range(1000): # Если при текущем значении переменной x выражение даёт истину (0), то if ((x not in a) <= (x in b)) and ((x not in c) <= (x in a)): count += 1 # прибавляем 1 к count if count > 30: # Если выражение истинно более чем для 30 целых x, print(n) # выводим ответ на экран и останавливаем цикл break
Ошибка.
Попробуйте повторить позже
На числовой прямой даны отрезки и функция
При каком наибольшем числе функция
истинна более чем для
целых чисел
?
Идея заключается в переборе возможных начал отрезка (от 1 до 1000) и проверке, что исходное выражение даёт истину
более чем для 25 значений переменной
(от 1 до 1000).
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 0: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений
начал отрезка
. При каждой итерации будем создавать переменную-счётчик, которая изначально равна 0, а затем
задавать отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений
переменной
. Если выражение истинно для текущего значения
, то к счётчику прибавляется 1. Если после перебора
всех значений count > 25, значит проверяемое число
удовлетворяет условию: присваиваем его
, если он больше
текущего значения данной переменной.
a = range(30, 50 + 1) # Задаём отрезок A b = range(40, 46 + 1) # Задаём отрезок B r = 0 # Подходящее число N for n in range(1, 1000): # Перебираем конец отрезка C c = range(n, 61 + 1) # Задаём отрезок C count = 0 # Количество значений x, при которых выражение даёт истину for x in range(1000): # Если при текущем значении переменной x выражение даёт истину (0), то if ((x not in b) <= (x not in a)) and ((x not in c) <= (x in b)): count += 1 # прибавляем 1 к count if count > 25: # Если выражение истинно более чем для 30 целых x, r = max(n, r) # выводим ответ на экран и останавливаем цикл print(r)
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наибольшую возможную длину такого
отрезка
, что формула
тождественно истинна, то есть принимает значение при любом значении переменной
.
Решение 1 (ручками):
Запишем, чего хотят враги:
Значит, враги будут подбирать , который не принадлежит отрезкам
и
, то есть они будут
использовать
Друзья же хотят, чтобы не принадлежал
, тогда
Это и есть отрезок максимальной длины, равной .
Решение 2 (прогой):
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора
максимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 0: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений
начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При
каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи
функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если выражение ложно хотя
бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора
всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка
:
присваиваем его длину
, если она больше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(43, 49 + 1) # Задаём отрезок P q = range(46, 55 + 1) # Задаём отрезок Q r = 0 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((x in a) <= (x in p)) or (x in q)) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = max(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: . Какова наименьшая возможная длина промежутка
,
что формула
тождественно истинна, то есть принимает значение при любом значении переменной
.
Решение руками
Выпишем игру за врагов. Понимаем, что врагам удовлетворяет, чтобы отрезок был в 13-18, и враги будут брать свои
в 10-13 и 18-29.
Чтобы перекрыть и не оставить шанса врагам на победу - друзьям нужно перекрыть отрезки 10-13 и 18-29. У них нет
другого выбора, кроме как взять отрезок равным 10-29.
Длина тут находится как: .
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора
минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если
выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если
после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка
:
присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(10, 29 + 1) # Задаём отрезок P q = range(13, 18 + 1) # Задаём отрезок Q r = 10 ** 100 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((x not in a) <= (x not in p)) or (x in q)) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран