Решение задач теории игр в MS
Exsel на примере задания ЕГЭ по информатики 19, 20, 21
Задача Два игрока
Петя и Ваня играют в следующую игру- перед ними лежит 2 кучи камней, игроки
ходят по очереди, первым ходит Петя, вторым Ваня. За один ход игрок может
добавить в любую кучу 1 камень или увеличить кол-во камней в 2 р . Игра
заканчивается, когда камней в обеих кучах становится не менее 53. Победителем
считается тот кто последним сделал ход. На начальном этапе игры в одной куче 9
камней, а во второй куче S камней
1 ≤ S≤43
Задача 19
Известно, что Ваня выиграл своим первым ходом
после неудачного ход Пети
Укажите минимальное кол-во камней S при такой ситуации
1.В ячейку в3 ввести 1 куча. В ячейку с3
ввести 2 куча В ячейку с4 ввести S. В ячейку в5 ввести 9. В
ячейку с5 ввести 5.
2. Построить таблицу от ячнйки d4 до g8
3. Ячейки d4 e4 объединить в них напечатать Петя, а в ячейки f4
Ваня, в ячейки g4 итог
ТО общий вид таблицы будет иметь вид
|
D |
E |
F |
G |
||
|
3 |
|||||
|
4 |
ПЕТЯ |
ВАНЯ |
ИТОГ |
||
|
5 |
|||||
|
6 |
|||||
|
7 |
|||||
|
8 |
|||||
4. Необходимо разобрать все возможные ходя
Пети для этого в ячейку D5 ввести B5+1,
первый возможный слабый ход, в ячейку E5 *с5
5. В ячейку D6 ввести в5,
те кол-во камней без изменения. В ячейку Е6 ввести с5+1, те кол-во камней без
изменения.
6. В ячейку D7 ввести
в5*2, в ячейку е7 ввести с5, в ячейку D8 ввести в5, в
ячейку е8 ввести с5*2,
ТО 1 чсть таблицы заполняется всевозможными
ходами Пети выделить их цветом.
Самая важная часть в таблице в комбинации D8 и е8 – это сильные ходы Пети.
7. В ячейку F5 ввести
МАКС (D5:Е5)*2+МИН(D5:Е5) растягиваем
значение формулы на все область ячеек F.
8. В ячейках столбца итог необходимо выяснить
какой из вариантов даст победу , для этого в ячейку g5
ввести фор-лу ЕСЛИ (F5>=53; ‘’+’’; ‘’-’’) растягиваем знач-е фор-лы на все ячейки от g5 до g8
Если в таблице не появится плюс, то меняется
значение С5.
Задача 20
Найдите 2 значения S при
которых у Пети есть выигрышная стратегия , но должны выполняться два условия
— Петя может выиграть за один ход
— Петя может выиграть за 2-м ходом независимо
отходов Вани.
Найденные значения записать в порядке
возрастания.
1. Таблицу из первой части копируем в область ячеек I3
—N8
2. Добавим в таблицу допол. поля
Там где столбец Ваня , чтоб
их стало два
,
верхнюю строку объединить , а также столбец Безопасность перед столбцом Итог.
ТО общий вид таблицы будет иметь вид:
|
K |
L |
M |
N |
O |
P |
Q |
|
|
3 |
|||||||
|
4 |
ПЕТЯ |
ВАНЯ |
Петя |
Безоп-ть |
Итог |
||
|
5 |
|||||||
|
6 |
|||||||
|
7 |
|||||||
|
8 |
|||||||
3. В ячейку I3 ввести 1 куча, в ячейку J3 ввести 2
куча,в ячейку J4 — S , I5 ввести 9,
J5 -11 .
4.
Удалить значения из столбцов ходов Пети. В ячейку
к5 ввести I5+1, L5 ввести J5, тогда
в ячейках ходов Вани вводятся формулы всех возможных его ходов В ячейку М5
ввести к5+1 , N5 ввести J5, М6
ввести к5, N6 ввести L5+1, , М7
ввести к5*2, N7 ввести L5, , М8
ввести к5, N8 ввести L5*2
ТО
будут перебраны все возможные варианты ходов Вани, тогда ходы Пети должны быть
все сильные.
Для
этого в столбец О5 вводится фор-ла МАКС (м5: N 5)*2+МИН(м5:
N 5), растягиваем знач-е этой фор-лы на область всех ячеек
в низ.
5. Т.к надо оценить игру Пети в столбце Итог вводят фор-лу ЕСЛИ (О5>=53; ‘’+’’; ‘’-’’) растягиваем знач-е этой
фор-лы на область всех ячеек в низ.
6. Т.к надо , чтоб выиграл Петя проконтролировать чтобы не выиграл Ваня
первым ходом именно для этой цели нужен столбец безопасность. В ячейку Р5
ввести фор-лу
ЕСЛИ
(м5+ N 5 >=53;
‘’+’’; ‘’-’’) растягиваем знач-е этой фор-лы на область всех ячеек в низ.
7.
Построенная таблица — это только один вариант
поведения Пети при игре, поэтому копируем таблицу ниже 4 раза не пропуская ни
одной строки, те вплотную. По следующему принципу:
ё
8. Внесем следующие изменения в скопированную часть
В К10 ввести I5, L 10 ввести J5 +1 (это будет второй возможный
выигрышный ход); в К15 ввести I5*2, L 15 ввести J5(это будет 3 возможный выигрышный ход);в К20- I5, в L 20 — J5*2(это будет 4 возможный выигрышный ход);.
Остальные
столбцы заполнятся автоматически благодаря относительной адресации.
9.Теперь необходимо просмотреть и проанализировать значения ячейки J5. Изменяя в ней значения по возрастанию до тех пор пока плюсы не
появятся в столбце Итога причем плюсы должны быть во всех четырех строках каждого
из 4 вариантов ходов а столбец безопасность должен быть отрицательным во всех 4
строках.
Задача 21
Сколько существует значений S которых одновременно выполняются два условия
— у Вани есть выигрышная стратегия при которой он выиграет 1 или 2 ходом
при любой игре Пети. —
у Вани нет стратегии, которая позволит ему гарантированно выиграть 1
ходом. С учетом полученного в задачи 20
можно уверенно утверждать, что выигрышные ходы Вани (9;16) и (9; 21) это
возможно при ходах Пети (9;15) и (9; 20). Решение этой задачи электронным
способом возможно только посте решения 19 и 20 зад на одной предметной
области. 1. Для решения
этой задачи скопируем таблицу из задания задачи 20 в область ячеек от U до AA в соответствии изображения
Внести изменения в значение столбцов S И T.
2.Очищаем значение столбцов игры Пети U И V.
Добавляем дополнительные столбцы в таблицу у
Пети будет два варианта ходов , поскольку в задании выигрыш может наступит и
на 1 и на 2 ходе.
ТО общий вид таблицы будет иметь вид:
Причем протяженность таблицы будет от столбцов
от U до АС, и от строк от 4 до 23 .
3. В ячейку U 5 ввести S5+1, а в ячейку V5 ввести Т5.
Ваня на подобный ход может ответить 4 разными
вариантами. Для х реализации очищаем все значения столбцов w и x.
В ячейки вводим фор-лы: w5=
U5+1; х2= V5; w10=
U5;х10= V5+1; w15=U5*2;х15=V5; w20= U5;х20= V5*2.
4. Для оценки возможных вариантов ходов Пети
скопировать данные из ячеек М5- N8 в ячейки y5-z8 из таблицы предыдущего задания. Формулы при
копировании изменятся в виду относительной адресации, хотя при копировании это
должно быть проконтролировано. Копируем эти значения и во все остальные ячейки y, z.
5. Второй ход Вани должен быть обязательно сильным, поэтому в ячейку
АА5 вводится фор-ла МАКС (y5: z5)*2+МИН(y5:
z5) ), растягиваем знач-е этой фор-лы на область всех
ячеек в низ.
Далее необходимо внести изменения в столбец Безопасность В ячейку АВ5
ввести фор-лу:
ЕСЛИ (y5+ z5>=53; ‘’+’’; ‘’-’’) , растягиваем знач-е этой
фор-лы на область всех ячеек в низ.
6. Для изменения столбца ИТОГ в ячейку АС5 вводится фор-ла: ЕСЛИ (АА5>=53; ‘’+’’; ‘’-’’) , растягиваем знач-е этой
фор-лы на область всех ячеек в низ.
7. Нельзя не учесть вариант при котором Ваня выигрывает первым ходом
для этого в ячейку х7 вводится фор-ла: ЕСЛИ (w5+ x5>=53; ‘’+’’; ‘’-’’) копировать
эту фор-лу в ячейки х12, х17, х22.
На основе предыдущего задания был сделан вывод что оптимальные s
либо 20, либо 15, поэтому рекомендуется проверку начать именно с
этих значений.
В ячейку s9 ввести 15, а в s10
ввести 20.
8.Полученная таблица отражает только 1 ход, а
их более, поэтому копируем эту таблицу ниже 4 раза в сплошную, тогда таблица
получится протяженностью до 64 строки. Внесем изменения в скопированную
таблицу: U25= s5+1; V25=Т5+1; U45= s5*2; V45=Т5; U65= s5; V65=Т5*2.
Для анализа заполненной таблицы введем в т5
значение 15 . Первым делом просматриваются ячейки х7, х12, х17, х22, если там
появится + , что Ваня выигрывает первым ходом и второй уже не нужен. Затем там
где в ячейках х плюсы не найдены просматривается столбец ИТОГ, там должны
встретится плюсы в 4-х подряд идущих строках , а безопасность должна идти с -.
Проделывается тоже самое для значения т5=20.
- 10.03.2023
Шестой тренировочный вариант, составленный на основе демоверсии ЕГЭ 2023 года по информатике от ФИПИ. Вариант включает все задания кодификатора 2023 года и учитывает все изменения, которые произошли в 2023 году (полный список изменений). Вариант содержит правильные ответы и подробные разборы для второй части теста — задания повышенной сложности. Ответы сохранены в конце варианта.
- Другие тренировочные варианты по информатике
Тест может содержать вопросы на различные темы, включая алгоритмы, программирование, базы данных, сети, компьютерную архитектуру и технологии. Вопросы могут быть представлены в различных форматах, таких как выбор одного или нескольких правильных ответов, соответствие, заполнение пропусков, короткий или развернутый ответы. В тесте могут также содержаться задания, требующие написания кода на языке программирования, анализа программного кода, использования различных программных инструментов и знание основных терминов и определений в области информатики.
- Дополнительные файлы для варианта 6
Смотреть в PDF:
Или прямо сейчас: cкачать в pdf файле.
Канал видеоролика: Физика Информатика
Смотреть видео:
#информатика #егэинформатика #икт #экзамены #егэ_2020 #мгту #школьникам #помощь_студентам #подготовкакэкзаменам
Свежая информация для ЕГЭ и ОГЭ по Информатике (листай):
С этим видео ученики смотрят следующие ролики:

Решение задание № 2 егэ по информатике. Задача 15814 с сайта СДАМ ГИА: РЕШУ ЕГЭ
Физика Информатика

Как решать 3 задание ЕГЭ по информатике? Задача 5129 с сайта К.Ю. Полякова
Физика Информатика

Разбираем 3 задание ЕГЭ по информатике. Задача 5148 с сайта К.Ю. Полякова
Физика Информатика

Решаем 7 задание ЕГЭ по информатике. Задача 193 с сайта К.Ю. Полякова
Физика Информатика
Облегчи жизнь другим ученикам — поделись! (плюс тебе в карму):
08.03.2023
Сегодняшний урок посвящён 15 заданию из ЕГЭ по информатике 2022.
Темой этого урока связана с преобразованием логических выражений.
Теорию для преобразования логических выражений Вы можете посмотреть в этой статье. Как можно работать с логическими выражениями на питоне, можно прочитать в этой статье.
Перейдём к практике решения задач 15 задания из ЕГЭ по информатике 2022.
Задача (Неравенство, одна переменная)
Какое количество натуральных чисел удовлетворяет логическому условию:
¬(X2 ≥ 9) ∨ ¬((X < 7) ∨ (X ≥ 10)) ?
Решение:
Первый способ (с помощью питона).
k=0 for x in range(1, 1000): if not(x**2 >= 9) or not((x < 7) or (x>=10)): k = k + 1 print(k)
Здесь перебираем с помощью цикла for натуральные числа от 1 до 1000.
Если логическое выражение выдаёт истину, то мы подсчитываем такой вариант.
Программа напечатает число 5.
Второй способ (с помощью рассуждений).
Натуральные числа — это целые, положительные числа. Например: 1, 2, 3, 4, и т. д.
Преобразуем первое выражение ¬(X2 ≥ 9) = (X2 < 9). Отрицание внесли в скобки. В этом случае знак, который находится в скобках, нужно поменять на противоположный.
Важно: Если было строгое неравенство, то оно станет нестрогим, и наоборот, если было неравенство нестрогим, то оно станет строгим.
Получается, что выражение (X2 < 9) будет истинно только при двух значениях: X = 1, X = 2.
Во втором выражении ¬((X < 7) ∨ (X ≥ 10)) удобно применить формулу Де Моргана.
Формула де Моргана:
¬(A ∨ B) = ¬A ∧ ¬B
¬(A ∧ B) = ¬A ∨ ¬B
Преобразуем выражение по формуле де Моргана и внесём отрицание в скобки:
¬((X < 7) ∨ (X ≥ 10)) = ¬(X < 7) ∧ ¬(X ≥ 10) = (X ≥ 7) ∧ (X < 10)
Получилось выражение (X ≥ 7) ∧ (X < 10). Между двумя выражениями стоит логическое умножение. Значит, одновременно должны выполняться и первое неравенство, и второе. Таким образом, получается, что подходят три значение для выражения (X ≥ 7) ∧ (X < 10). Это X = 7, X = 8, X = 9.
Обратимся к самому начальному логическому условию. Там два выражения соединятся логическим сложением. Значит, мы должны объединить те случаи, когда у нас первое выражение становится истинным (X=1, X=2), и те случаи, когда второе выражение становится истинным (X = 7, X = 8, X = 9).
Получается всего 5 натуральных чисел удовлетворяют изначальному логическому условию.
Ответ: 5
Разберём ещё одну разминочную задачу для подготовки к ЕГЭ по информатике 2022.
Задача (Неравенство, две переменные)
Для какого наибольшего целого неотрицательного числа A выражение
(x ≥ A) ∨ (y ≥ A) ∨ (x * y ≤ 205)
тождественно истинно, т.е. принимает значение 1 при любых целых положительных x и y ?
Решение:
Первый способ (с помощью питона).
for A in range(0, 300): k=0 for x in range(1, 301): for y in range(1, 301): if (x >= A) or (y >= A) or (x * y <= 205): k=k+1 if k==90000: print(A)
В первом цикле перебираем значения для A. Здесь мы пытаемся подобрать ответ в диапазоне от 0 до 300. Этот диапазон меньше, чем в прошлой задаче. Потому что здесь три вложенных цикла, и если перебирать числа от 0 до 1000, то программа может работать очень долго. При необходимости можно указать другой диапазон.
Для каждого A устанавливаем счётчик k в ноль.
Затем перебираем все числа в диапазоне от 1 до 300 (включительно) для переменных x и y, тем самым имитируем фразу «для любых x и y».
Если логическое выражение сработает при каждом значении x и y, то считается, что значение A нам подходит, и в счётчике по окончанию вложенных циклов будет значение 90000 (300 * 300 = 90000).
Наибольшее число, которое напечатает программа равно 15.
Второй способ (с помощью рассуждений).
Здесь есть три выражения в скобках, которые соединены логическим сложением. При логическом сложении достаточно хотя бы одного выражения, где будет истина, чтобы всё общее выражение было истинно.
Если мы сделаем A слишком большим, к примеру A = 250, то найдутся такие x = 16, y = 16, при которых все три условия в скобках не будут выполняться, и, значит, всё общее выражение будет ложным.
Следовательно, нам нужно выбрать таким A, чтобы не было возможности подобрать x, y, при которых все три выражения ложны.
Сделаем так: пока x и y меньше A, должно «работать» третье выражение в скобках. Как только x или y сравняются с A — начинают «работать» первое или второе выражение.
До какого же максимального значения могут дойти x и y, чтобы перемножение этих двух чисел было меньше или равно 205 (x * y <= 205) ?
15 * 15 = 225
14 * 14 = 196
Получается, пока числа x и y меньше 15, «выручает» третье выражение (x * y ≤ 205), как только станут x ≥ 15 и y ≥ 15, будут «работать» первое и второе выражение.
Отсюда получаем, что максимальное число A = 15
Ответ: 15
Задача (Функция ДЕЛ)
Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наибольшего натурального числа А формула
¬ДЕЛ(x, А) → (ДЕЛ(x, 6) → ¬ДЕЛ(x, 9))
тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной x)?
Решение:
Первый способ (с помощью питона).
def D(n, m): if n%m==0: return True else: return False for A in range(1, 1000): k=0 for x in range(1, 1001): if D(x, A) or (not(D(x, 6)) or not(D(x, 9))): k=k+1 if k==1000: print(A)
Здесь мы формируем функцию ДЕЛ (функцию D). Если n делится на m, то функция возвращает Истину, в противном случае функция возвращает Ложь.
Далее решаем примерно так же, как и в прошлых задачах: для каждого числа A перебираем все значения x. Следование расписываем по формуле A ⟶ B = ¬A ∨ B.
Наибольшее число здесь получается равно 18.
Второй способ (с помощью рассуждений).
Рассмотрим случай, когда в левой части логического выражения будет 1, а в правой 0. В остальных случаях беспокоится не за что, потому что вся формула будет выдавать истину.
Посмотрим, когда в правой части получается ноль. Функция ДЕЛ(x, 6) должна выдавать истину. Т.е. x должен делится на 6. А функция ¬ДЕЛ(x, 9) должна выдавать ноль. Т.е. без отрицания ДЕЛ(x, 9) должна выдавать истину. Значит, x так же делится на 9.
x делится на 6 => x = 2*3*n, n ∈ N
x делится на 9 => x = 3*3*n, n ∈ N
Чтобы выполнялся случай, когда в правой части получается ноль, икс должен быть равен x = 3*3*2*n (n ∈ N). Т.е. получается, что икс должен быть кратен 18.
Т.е. получается, что когда x делится на 18, в правой части логического выражения будет получатся ноль. Чтобы спасти ситуацию, мы должны в левой части логического выражения не получать 1. Следовательно, ¬ДЕЛ(x, А) должно выдавать ноль. Значит, ДЕЛ(x, А) должно выдавать 1. Таким образом, приходим к выводу, что A должно равняться 18.
Если получится опасная ситуация, когда x кратен 18, то она будет нейтрализована, ведь в левой части будет получатся ноль.
Ответ: 18
Ещё один важный тип задач 15 задания ЕГЭ по информатике 2022
Задача (Поразрядная конъюнкция)
Обозначим через m&n поразрядную конъюнкцию неотрицательных целых чисел m и n. Так, например, 14&5 = 11102 & 01012 = 4
Для какого наименьшего неотрицательного целого числа A формула
x&51 ≠ 0 → (x&A = 0 → x&25 ≠ 0)
тождественно истинна (то есть принимает значение 1 при любом неотрицательном целом значении переменной x)?
Решение:
Первый способ (с помощью питона).
for A in range(0, 1000): k=0 for x in range(0, 1000): if x&51==0 or (x&A!=0 or x&25!=0): k=k+1 if k==1000: print(A)
Здесь следование преобразовываем по формуле: A ⟶ B = ¬A ∨ B. Так же и A, и x неотрицательные числа. Поэтому мы перебираем их диапазон, начиная с нуля. Из-за этого в цикле, который перебирает переменную x, мы устанавливаем верхнюю границы равной 1000, а не 1001. Тогда тоже будет 1000 повторений в этом цикле.
Наименьшее число равно 34.
Второй способ (с помощью рассуждений).
Переведём числа 51 и 25 в двоичную систему.
51 = 1100112
25 = 110012
Формула будет тождественно ложна, когда
Этого допустить нельзя!
При каком x получается в левой выражении формулы истина ? Если у икса в двоичном представлении в тех разрядах, где у числа 51 стоят 1, будет хотя бы в одном месте 1.
Рассмотрим правое выражение формулы. Ноль получается в единственном случае:
Рассмотрим выражение x&25 ≠ 0. Чтобы в этом логическом выражении получился ноль, нужно x&25 = 0. Посмотрим на двоичное представление числа 25. В тех разрядах, где стоят единицы, у икс должны быть нули (для x&25 = 0).
Сформулируем окончательное условие для x, при котором возникает опасность превращение общей формулы в ложь.
Нам нужно «поломать эту песенку» с помощью x&A = 0. Т.е. нельзя допускать, чтобы это выражение было истинно.
Получается, что A = 1000102. Это наименьшее из возможных число, при котором мы точно себя обезопасим от того, что вся формула будет ложна.
A = 1000102 в десятичной системе будет 34.
Ответ: 34
Ещё один тип задач 15 задания ЕГЭ по информатике
Задача (числовая прямая)
На числовой прямой даны отрезки P=[5, 13] и Q=[8, 19]. Укажите наименьшую возможную длину такого отрезка A, что формула (¬(x ∈ P) → (x ∈ Q)) → (x ∈ A ) верна при любых значениях x.
Решение:
Первый способ (с помощью питона).
def F(a, b, x): if a <= x <= b: return True else: return False mn=10**9 for a in range(0, 200): for b in range(a, 200): k=0 for i in range(-200, 200): x = i / 2 if not((F(5, 13, x) or F(8, 19, x))) or F(a, b, x): k=k+1 if k==400: mn= min(mn, b-a) print(mn)
Получается ответ 14. Более подробно, как решать задачи на ОТРЕЗКИ из 15 задания ЕГЭ по информатике на Python, можете посмотреть в этой статье.
Второй способ (с помощью рассуждений).
Если будут такие варианты:
То нам беспокоится не о чём. Потому что формула всегда будет истинна! (см. таблицу истинности для следования →)
Нас же будет интересовать этот случай.
При таком раскладе вся формула будет ложна! Нам нужно этого не допустить при любом значении x!
Единица получается в первом подвыражении в трёх случаях:
1) Случай
Выражение ¬(x ∈ P) получается ложно, когда (x ∈ P) будет истинно! Получается при x ∈ [5, 13] выражение ¬(x ∈ P) — ложно!
Выражение (x ∈ Q) ложно, когда x ∉ [8, 19]
Какой же минимальной длины должен быть отрезок A, чтобы этот случай не проходил при любом x ? При этом случае отрезок A должен быть равен [5, 8). Тогда левое выражение пусть и может стать единицей при x ∈ [5, 8), но выражение (x ∈ A) будет также равно 1 при x ∈ [5, 8)! И схема 1 → 0 не пройдёт. Будет 1 → 1.
Для 1 случая A=[5, 
2) Случай
При каких x выражение ¬(x ∈ P) обращается в ноль, мы уже рассматривали: x ∈ [5, 13].
Второе выражение «выдаёт» 1 при x ∈ [8, 19].
Получается, что при при x ∈ [8; 13] первое выражение в скобках в главной формуле будет тождественно истинно!
С помощью отрезка A нужно это нейтрализовать путём превращения второго выражения в скобках в главной формуле в 1, пока x ∈ [8; 13]. Значит, для этого случая A = [8; 13]
3) Случай
В выражении ¬(x ∈ P) единица получается, когда в выражении (x ∈ P) получается ноль. Тогда x ∉ [5, 13]!
Чтобы во втором выражении (x ∈ Q) была единица, нужно, чтобы x ∈ [8, 19].
Получается, что 3 случай выполняется, если x ∈ (13, 19].
С помощью отрезка A нужно этому противодействовать! Нужно чтобы выражение (x ∈ A) было всегда 1 при x ∈ (13, 19]. Тогда A должно быть (13, 19].
Следовательно, для третьего случая A=(13, 19].
Нам нельзя допустить ни одного случая! Поэтому, объединив все случаи, получаем, что A=[5, 19].
Длина отрезка равна 14.
Ответ: 14
Ещё одна задача про числовую прямую из банка тренировочных заданий ЕГЭ по информатике 2021.
Задача (Числовая прямая, закрепление)
На числовой прямой даны отрезки P=[5, 13] и Q=[8, 19]. Укажите наименьшую возможную длину такого отрезка A, что формула ((x ∈ P) ∧ ¬(x ∈ A)) → ((x ∈ Q) ∧ ¬(x ∈ A)) верна при любых значениях x.
Решение:
Первый способ (с помощью питона).
def F(a, b, x): if a <= x <= b: return True else: return False mn=10**9 for a in range(0, 200): for b in range(a, 200): k=0 for i in range(-200, 200): x = i / 2 if not((F(5, 13, x) and not(F(a, b, x)))) or (F(8, 19, x) and not(F(a, b, x))): k=k+1 if k==400: mn=min(mn, b-a) print(mn)
Второй способ (с помощью рассуждений).
Формула может быть ложна, когда
Во всех остальных случаях, формула всегда верна.
Чтобы выражение ((x ∈ P) ∧ ¬(x ∈ A)) было тождественно 1, выражение (x ∈ P) обязательно должно быть тождественно 1. А, значит, x ∈ [5, 13] — это опасная зона, при которой появляется возможность обратить всю формулу в ноль!
Мы можем сразу пресечь эту опасность с помощью отрезка A. Выбрать такой отрезок, чтобы он всегда «выдавал» ложь при x ∈ [5, 13]. Для этого достаточно выбрать A=[5, 13]! Но вдруг его можно сделать ещё более маленьким за счёт правой части формулы ?
Предположим, что отрезок A сделали ещё меньшим. Тогда при каком-то x (x ∈ [5, 13]) выражение ¬(x ∈ A) будет «выдавать» 1! Причём такое же выражение стоит и в правой части формулы! Там тоже будет 1 для выражения ¬(x ∈ A).
Нас же в этом случае должно выручить выражение (x ∈ Q). Если оно «выдаст» 1 в этот «сложный» момент, то мы спасены! Ведь тогда получается, что правая часть всей формулы будет «выдавать» не 0, а 1. Посмотрим при каких x из отрезка [5, 13] приходит это спасение.
Видим, что в интервале x ∈ [8, 13] нас спасает выражение (x ∈ Q).
Значит, отрезок A можно сократить до A=[5, 8).
Длина отрезка будет равна 3!
Ответ: 3
Задачи для закрепления
Задача (Неравенство, две переменные, закрепление)
Для какого наибольшего целого неотрицательного числа A выражение
(x < A) ∧ (y < A) ∧ (x * y > 603)
тождественно ложно, т.е. принимает значение 0 при любых целых положительных x и y ?
Решение:
Первый способ (с помощью питона).
for A in range(0, 300): k=0 for x in range(1, 301): for y in range(1, 301): if not( (x < A) and (y < A) and (x * y > 603) ): k=k+1 if k==90000: print(A)
Т.к. выражение должно быть ЛОЖНО, то обернём логическое выражение в функцию not(). Видим, что программа не сильно отличается от прошлой задачи. Данный шаблон подходит для большинства задач подобного типа.
Наибольшее число получается равно 25.
Второй способ (с помощью рассуждений).
В этой задаче нужно, чтобы общее выражение было ложно!
Если мы поставим отрицание над всем выражением, то можно искать такое максимальное A, при котором всё выражение тождественно истинно, а не ложно!
¬((x < A) ∧ (y < A) ∧ (x * y > 603)) = ¬(x < A) ∨ ¬(y < A) ∨ ¬(x * y > 603)
Здесь применили формулу де Моргана! Т.е. каждое подвыражение получило отрицание + соединительная логическая операция (логическое умножение) сменилась на противоположную операцию (логическое сложение).
Внесём отрицание в скобки. Получается:
(x ≥ A) ∨ (y ≥ A) ∨ (x * y ≤ 603)
Получили ситуацию, как в прошлой задаче! Напомню, что теперь нужно, чтобы общее выражение было истинно.
Найдём максимальное число, до которого могут «подняться» x и y, чтобы ещё работало третье выражение!
Обратите внимание, что x и y — симметричны. Значит, что верхняя планка для x и y будет одно и тоже число.
Поэтому вспоминаем таблицу квадратов.
25 * 25 = 625
24 * 24 = 576
Получается, что максимальное число до которого могут «дойти» x и y, чтобы «работало» третье выражение, равно 24.
Тогда, начиная с 25 для x и y, должны работать первое и второе выражение.
Получается, что максимальное число для A равно 25.
Ответ: 25
Ещё одна задачка подобного типа из тренировочных упражнений 15 задания ЕГЭ по информатике.
Задача (Неравенство, две переменные, закрепление)
Для какого наименьшего целого числа A формула
(3 * x + y < A) ∨ (x < y) ∨ (16 ≤ x)
тождественно истинна, т.е. принимает значение 1 при любых целых неотрицательных x и y ?
Решение:
Первый способ (с помощью питона).
for A in range(-300, 300): k=0 for x in range(1, 301): for y in range(1, 301): if (3*x + y < A) or (x < y) or (16 <= x): k=k+1 if k==90000: print(A)
Наименьшее число равно 61. Здесь не сказали, что A принимает неотрицательные значения, поэтому мы включили в диапазон для A числа, которые меньше нуля. Из-за этого увеличилось время выполнения программы, но ответ получим за приемлемое время.
Второй способ (с помощью рассуждений).
Чтобы вся формула была тождественно истинна, нужно, чтобы хотя бы одно выражение «выдавало» истину, т.к. выражения в формуле соединяются с помощью логического сложения!
Взглянем на третье выражение. Пока x ≥ 16, всё идёт как надо. Третье выражение будет истинно, и, значит, вся формула будет истинна.
Но если x ≤ 15, то нужно, чтобы нас «спасало» первое или второе выражение.
Рассмотрим второе выражение. Пока y > x (x ≤ 15) => y > 15, у нас всё нормально, второе выражение будет истинно, и вся формула будет истинна.
Теперь обратим внимание на первое выражение. Оно должно нас «спасать», когда третье и второе выражение «не спасло»! Это возможно, если x ≤ 15 (иначе «спасло» бы третье выражение), а так же y ≤ 15 (иначе «спасало» бы второе выражение).
Но, чтобы первое выражение было всегда истинно при x ≤ 15 и y ≤ 15, мы должны подобрать число A при максимальных x и y (x=15, y=15)! Ведь для более маленьких значений выражение (3 * x + y < A) точно будет истинно.
Получается:
3 * 15 + 15 < A
60 < A
Нужно найти наименьшее число для A, при котором A > 60. Тогда там, где не «спасли» третье и второе выражение, точно «спасёт» первое выражение. Получается A = 61.
Ответ: 61
Задача (ЕГЭ по информатике, Москва, 2020)
Для какого наибольшего целого неотрицательного числа A выражение
(x > A) ∨ (y > x) ∨ (2 * y + x < 110)
тождественно истинно, то есть принимает значение 1 при любых целых неотрицательных x и y ?
Решение:
Первый способ (с помощью питона).
for A in range(0, 300): k=0 for x in range(1, 301): for y in range(1, 301): if (x > A) or (y > x) or (2 * y + x < 110): k=k+1 if k==90000: print(A)
Максимальное число получается равно 36.
Второй способ (с помощью рассуждений).
Пока y > x, второе подвыражение всегда истинно, значит, и всё выражение истинно.
Теперь будем рассматривать случай y ≤ x.
Рассмотрим третье подвыражение. Найдём максимальные значения для x и для y, которые они одновременно могут принимать, и при которых ещё выполняется третье условие.
Т.к. мы рассматриваем случай y ≤ x, то максимальное число для y будет xmax т.е. ymax = xmax.
Тогда
2 * xmax + xmax < 110
3 * xmax < 110
36 * 3 = 108
37 * 3 = 111
xmax = ymax = 36
Если x «перевалит» за 36, и при этом y ≤ x (иначе «спасает» второе подвыражение), то должно «спасать» первое выражение.
Получается, что наибольшее значение A будет равно 36.
Ответ: 36
Следующий тип задач часто можно встретить в тренировочных вариантах ЕГЭ по информатике 2022.
Задача (С функцией ДЕЛ, закрепление)
Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наибольшего натурального числа A формула
ДЕЛ(120, A) ∧ ((ДЕЛ(x, 70) ∧ ДЕЛ(x, 30)) → ДЕЛ(x, A))
тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной х)?
Решение:
Первый способ (с помощью питона).
def D(n, m): if n%m==0: return True else: return False for A in range(1, 1000): k=0 for x in range(1, 1001): if D(120, A) and (not(D(x, 70) and D(x, 30)) or D(x, A)): k=k+1 if k==1000: print(A)
Наибольшее число получается равно 30.
Второй способ (с помощью рассуждений).
Рассмотрим левую часть логического выражения. Мы видим, что число 120 должно делится на A. Значит, для A уже есть некоторое ограничение (A <= 120).
Рассмотрим правую часть выражения. Изучим, когда она превращается в ноль. Тогда
Т.е. x должен делится на 70 и одновременно x должен делится на 30.
x = 70*n = 2*5*7*n (n ∈ N)
x = 30*n = 2*5*3*n (n ∈ N)
Чтобы одновременно выполнялись два условия, икс должен быть равен x = 2*5*7*3*n (n ∈ N).
Для того, чтобы правое выражение не превращалось в ноль, x как раз должен делится на число 2*5*7*3. Тогда будет 1->1. Т.е. число A должно равняться 2*5*7*3. Но мы сказали, что A <= 120, плюс, должно являться делителем числа 120. Значит, должны снизить значение для A.
Рассмотрим значение 2*5*7 для числа A (Предыдущее число, но без тройки). Для правой части оно подходит, т.к. «при малейшей» возможности превращения правого выражения в ноль (т.е. ДЕЛ(x, 70) = True), у нас будет спасаться ситуация, т.к. ДЕЛ(x, A) так же
будет равно 1. И снова получаем 1->1. Но это значение не подходит для левой части, ведь тогда A не является делителем числа 120.
Приходится брать число 2*5*3 (без семёрки). Здесь ситуация аналогично предыдущему случаю, только теперь это число является делителем числа 120.
В ответе напишем 30.
Ответ: 30
Задача (Поразрядная конъюнкция, закрепление)
Введём выражение M & K, обозначающее поразрядную конъюнкцию M и K (логическое «И» между соответствующими битами двоичной записи). Определите наименьшее натуральное число A, такое что выражение
(X & 49 ≠ 0) → ((X & 33 = 0) → (X & A ≠ 0))
тождественно истинно (то есть принимает значение 1 при любом натуральном значении переменной X)?
Решение:
Первый способ (с помощью питона).
for A in range(1, 1000): k=0 for x in range(1, 1001): if (x&49==0) or ((x&33!=0) or (x&A!=0)): k=k+1 if k==1000: print(A)
Наименьшее число равно 16.
Второй способ (с помощью рассуждений).
Переведём числа 49 и 33 в двоичную систему.
4910 = 1100012
3310 = 1000012
Рассмотрим случай, когда функция стремится превратится в ноль.
Чтобы левое выражение выдавало истину, икс должен иметь 1 (единицу) в первом разряде или во второй разряде, или в последнем разряде (в 6-ти битном числе).
Рассмотрим правое выражение. Посмотрим, когда выражение (X & 33 = 0) выдаёт истину. Первый бит и последний бит должен быть равен нулю. Т.е получается, что в 6-ти битном числе нас интересует второй бит. Если он будет равен 1 и при этом первый бит и последний будут равны 0, то возникает опасная ситуация, которую нужно спасть.
При выше описанных условиях выражение (X & A ≠ 0) должно выдавать истину. Тогда наименьшее A равно 100002 = 162.
Ответ: 16
Задача (числовая прямая, закрепление 2)
На числовой прямой даны два отрезка: P = [20, 30] и Q = [35, 60]. Найдите наименьшую возможную длину отрезка A, при котором формула
¬(x ∈ A) ∧ ((x ∈ P) ∨ (x ∈ Q))
тождественно ложна, то есть принимает значение 0 при любых x.
Решение:
Первый способ (с помощью питона).
def F(a, b, x): if a <= x <= b: return True else: return False mn=10**9 for a in range(0, 200): for b in range(a, 200): k=0 for i in range(-200, 200): x = i / 2 if not(not(F(a, b, x)) and (F(20, 30, x) or F(35, 60, x))): k=k+1 if k==400: mn=min(mn, b-a) print(mn)
Ответ будет 40.
Второй способ (с помощью рассуждений).
Рассмотрим наоборот, когда логическое выражение выдаёт истину.
В правой части получается 1, когда x ∈ P или x ∈ Q. Именно в эти моменты выражение ¬(x ∈ A) должно спасать ситуацию и выдавать 0. Тогда без отрицания (x ∈ A) должно выдавать 1. Чтобы покрыть два отрезка, берём A=[20; 60].
Минимальная длина получается 60-20=40.
Ответ: 40
На этом всё! Увидимся в новых уроках по подготовке к ЕГЭ по информатике!
Добрый день! А как в 5 задаче (про числовую прямую) получился ответ 14?
В конце же получается, что A принадлежит [5, 19], то есть длина отрезка 15.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 — 15 штук
Или я что-то неправильно понял?
Считается количество единиц, а не сколько целых чисел в этом отрезке.
И в самой последней задаче на закрепление, у вас, видимо, та же ошибка. Не 40, а 41 должно быть?
Как решать 15 задание с «~» тильдой на питоне?
Как например это задание:
На числовой прямой даны два отрезка: P = [7, 14] и Q = [9, 11]. Укажите наибольшую возможную длину промежутка A, для которого формула
((x ∈ P) ~ (x ∈ Q)) → ¬(x ∈ A)
Грамотное объяснение. Безумно здорово, что есть объяснения как на питон (перебором) так и чисто в математической форме, потому что в информатике оба подхода, мне кажется, равносильны. Спасибо

















