На уроке рассмотрен разбор 19, 20, 21 задания ЕГЭ по информатике: дается подробное объяснение и решение задания.
Читать текстовую версию — https://labs-org.ru/ege-19/
Объяснение заданий 19, 20 и 21 ЕГЭ по информатике
19-е задание: «Анализ алгоритма логической игры»
Уровень сложности — повышенный,
Требуется использование специализированного программного обеспечения — нет,
Максимальный балл — 1,
Примерное время выполнения — 6 минут.
Проверяемые элементы содержания: Умение анализировать алгоритм логической игры
20-е задание: «Поиск выигрышной стратегии»
Уровень сложности — повышенный,
Требуется использование специализированного программного обеспечения — нет,
Максимальный балл — 1,
Примерное время выполнения — 6 минут.
Проверяемые элементы содержания: Умение найти выигрышную стратегию игры
21-е задание: «Дерево игры для выигрышной стратегии»
Уровень сложности — повышенный,
Требуется использование специализированного программного обеспечения — нет,
Максимальный балл — 1,
Примерное время выполнения — 10 минут.
Проверяемые элементы содержания: Умение построить дерево игры по заданному алгоритму и найти выигрышную стратегию
Решение заданий 19-21 (Теория игр) из ЕГЭ по Информатике. Решение на Python, т.к. он наиболее популярен среди сдающих ЕГЭ
Зачем это сделал?
Серфил интернет, находил какую то чепуху их серии «Решим как с помощью Excel». В самом задании уже нам дам намек, что рекурсивное решение плавает на поверхности. Вот пожалуйста
Что тут есть
Здесь реализованы решения для заданий как с одной кучей, так и для заданий с двумя. С тремя и больше я не видел, да и вряд ли дадут такое в ЕГЭ, но доработать легко
Смотрим на НОВЫЙ АЛГОРИТМ РЕШЕНИЯ ТИГРА
Код написан на основе идеи из этого ролика
https://www.youtube.com/watch?v=FKUmpu8zdS0
ОТКРЫТЫЙ КУРС https://kompege.ru/course
За мат, КАПС, политоту, флуд — перманентный бан.
Связаться с автором: https://vk.com/cabanovalexey
Группа ВК https://vk.com/ege_info_open
Тренажёр КЕГЭ: https://kompege.ru
———————————————————————————————
Ссылки на каналы других годных преподавателей:
Евгений Джобс
http://www.youtube.com/channel/UCu50NY1uYmfuAWtNqPpHyDg
Информатик БУ
https://www.youtube.com/channel/UCmUcjDHUkIMhfqBfyHYXYuA
Alex Danov
https://www.youtube.com/c/AlexDanov
Андрей Рогов
https://www.youtube.com/c/devinf74
Леонид Шастин
https://www.youtube.com/channel/UC5A3HZVC0QeHhY5idc8Et5A
PRO100 EGE
https://www.youtube.com/channel/UCYszoUecy8xroj_kjPOgOQQ
Ботай каждый день, глупый дурачок
https://www.youtube.com/channel/UCJdc8rnYV5eEUqLlyAJDQwQ
Таймкоды
00:00 Приветствие
02:40 Как работает алгоритм? (1 куча камней)
40:25 1 куча камней с проигрышем
53:25 2 кучи камней
01:03:20 2 кучи камней с уменьшением
01:10:55 Нельзя повторять ход соперника
01:20:55 Нельзя повторять свой предыдущий ход
01:30:45 Ограничение на ходы чёт/нечет 1
01:39:30 Ограничение на ходы чёт/нечет 2
01:47:15 Суперход
01:56:45 Гроб из Кулабуховой
02:13:30 Окончание и напутствия
- Категория
- Programming
Добро пожаловать на наш сайт. Здесь Вы сможете посмотреть огромное количество видео-отзывов о товарах, которые пользователи приобретали в сети интернет в соответствующих интернет-магазинах. Наш сайт не осуществляет какие-либо реализации товаров или услуг, а служит ресурсом ознакомительного характера для возможности принять решение о приобретении товаров, ранее купленных пользователями сети интернет. Также уведомляем правообладателей каких-либо товарных знаков о том, что сайт не загружает и распространяет какие-либо видео, контент, нарушающий исключительные права владельцов товарных знаков. Все ссылки на видео взяты из открытого источника по API информационного ресурса youtube.com. Если у Вас остались вопросы по поводу функционирования сайта или Вы хотите, чтобы Ваш бренд был освещен на нашем сайте в качестве дополнительной рекламы, при этом на каналах youtube достаточно много пользовательских видео-отзывов о Вашем бренде, напишите нам через форму обратной связи и мы с удовольствием добавим информационные материалы на сайт с целью продвижения Вашего товарного знака и для возможности получения информации нашим пользователям о Вашем товаре.
Разбор заданий 19,20,21 ЕГЭ по информатике в Excel.
Задание 19.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Например, пусть в одной куче 10камней, а в другой 5 камней; такую позицию в игре будем обозначать (10,5). Тогда за один ход можно получить любую из четырёх позиций: (11,5), (20,5), (10,6), (10,10). Для того чтобы делать ход, у каждого игрока есть неограниченное количество камней.
Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 77. Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах будет 77 или больше камней.
В начальный момент впервой куче было семь камней, вовторой куче – S камней: 1S69
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока – значит описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. В описание выигрышной стратегии не следует включать ходы играющего по этой стратегии игрока, не являющиеся для него безусловно выигрышными, т.е. не являющиеся выигрышными независимо от игры противника.
Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
Решение.
Поскольку у нас 2 кучикамней, будем использовать 2 ячейки. В ячейку A4 введём 7 (количество камней в первой куче) и поскольку количество камней во второй куче неизвестно, введём в ячейкуB4 Excelпроизвольное число, например 10. Распишем ходы Пети.
Для того чтобы Ваня гарантировано выиграл первым ходом, последний ход его должен быть самым сильным. Для этого количество камней из кучи с максимальным количеством камней умножаем на 2 и прибавляем количество камней из другой кучи. В ячейку E4 вводим формулу
=МАКС(C4:D4)*2 + МИН(C4:D4). Копируем эту формулу в ячейки E5:E7.
т.к. по условию задачи Ваня должен выиграть своим первым ходом, то суммарное количество камней в двух кучах должно быть 77. При этом количество камней во второй куче должно быть минимальным. Будем подбирать количество камней во второй куче, пока не найдем минимальное, при котором суммарное количество камней количество камней у Вани не станет 77.
И
Для наглядности выполним условное форматирование. Выделим ячейки E4:E7. Выбираем Условное форматирование – Правила выделения ячеек – другие правила – значения 77 – форма – заливка – зеленая – ОК — ОК
такое количество камней во второй куче будет равно 18.
Задание 20. Для игры, описанной в предыдущем задании, найдите два таких значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
— Петя не может выиграть за один ход;
— Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.
Ответ:
Решение.
Введём в ячейку A10количество камней в первой куче — 7, в ячейку B10 – количество камней во второй куче, т.к. количество камней во второй куче неизвестно, введём 10 (число произвольное). Скопируем таблицу, полученную в первом задании, в ячейку C9.
Так как Петя должен сделать свои 4 хода, а затем Ваня свои ходы, скопируем таблицу из первого задания ещё три раза. Распишем все первые ходы Пети. Ходы Вани и второй ход Пети при этом рассчитываются автоматически.
При S=10 Петя выигрывает своим вторым ходом только при одном ходе Вани (7,40), а нам надо, чтобы Петя после своего первого хода при любом ходе Вани выигрывал своим вторым ходом, т.е. нам нужно найти такое S, при котором все вторые ходы Пети в одном из прямоугольников были 77. Кроме того, нам надо будет следить за последним ходом Вани, т.к. может случиться так,что Петя выигрывает своим вторым ходом, но до этого побеждает Ваня. Для этого создадим дополнительный столбец, в который будем записывать сумму камней в двух кучах у Вани и следить, чтобы это значение было 77. В ячейку H10вводим формулу =E10 + F10и копируем её в ячейки H11:H25. Для наглядности выполним условное форматирование.
Меняя значение Sво второй куче, находим решение задачи. Первое значение S=31 ивторое значение S=34
Ответ: 3134
Задание 21.
Для игры, описанной в задании 19, найдите минимальное значение S, при котором одновременно выполняются два условия:
— у Вани естьвыигрышная стратегия,позволяющая ему выиграть первым иливторым ходом при
любой игре Пети;
— у Вани нет стратегии,которая позволит ему гарантированно выиграть первым ходом.
Решение.
Скопируем таблицу из второго задания в ячейку K3 и снова поменяем местами Петя, Ваня, Петя. В ячейку I4 введём количество камней в первой куче, в ячейку J4 – число, например, 10 (количество камней во второй куче). Тогда при первом ходе Пети K4 =I4+1, L4=J4.
Выделим данный фрагмент таблицы жирным. Так как Петя не должен выиграть своим первым ходом, скопируем полученную таблицу ещё 3 раза. Введём формулы в ячейкиK20=I4, L20=J4+1, K36=I4*2, L36=J4, K52=I4, L52=J4*2. Также надо проверить, не выиграет ли Ваня своим первым ходом. Для этого в ячейку M5 введём формулу =M4+N4. Скопируем эту формулу в ячейкиM9, M13,M17, M21, M25, M29, M33, M37, M41, M45, M49. Снова будем проверять, используя условное форматирование. Меняя значение вячейке J4, находим такое минимальное S, при которому Вани естьвыигрышная стратегия,позволяющая ему выиграть первым иливторым ходом прилюбой игре Пети;у Вани нет стратегии,которая позволит ему гарантированно выиграть первым ходом.
На уроке рассмотрен разбор 19, 20, 21 задания ЕГЭ по информатике: дается подробное объяснение и решение задания
Содержание:
- Объяснение заданий 19, 20 и 21 ЕГЭ по информатике
- Теория игр. Поиск выигрышной стратегии
- Решение 19, 20, 21 заданий ЕГЭ по информатике
- Игра с двумя кучами камней или табличка
- Задания для тренировки 19, 20, 21 заданий ЕГЭ (взяты из КИМ и сборников прошлых лет)
- Игра с одной кучей камней
- Игра с набором слов
Объяснение заданий 19, 20 и 21 ЕГЭ по информатике
19-е задание: «Анализ алгоритма логической игры»
Уровень сложности
— повышенный,
Требуется использование специализированного программного обеспечения
— нет,
Максимальный балл
— 1,
Примерное время выполнения
— 6 минут.
Проверяемые элементы содержания: Умение анализировать алгоритм логической игры
20-е задание: «Поиск выигрышной стратегии»
Уровень сложности
— повышенный,
Требуется использование специализированного программного обеспечения
— нет,
Максимальный балл
— 1,
Примерное время выполнения
— 6 минут.
Проверяемые элементы содержания: Умение найти выигрышную стратегию игры
21-е задание: «Дерево игры для выигрышной стратегии»
Уровень сложности
— повышенный,
Требуется использование специализированного программного обеспечения
— нет,
Максимальный балл
— 1,
Примерное время выполнения
— 10 минут.
Проверяемые элементы содержания: Умение построить дерево игры по заданному алгоритму и найти выигрышную стратегию
До ЕГЭ 2021 года — эти задания были объединены в задание № 26 ЕГЭ
Типичные ошибки и рекомендации по их предотвращению:
«Для пункта 2 или 3 в представленной стратегии рассмотрены не все возможные ходы проигрывающего игрока, которые он может сделать при игре выигрывающего игрока по выигрышной стратегии.
Для пункта 3 представлено дерево игры, содержащее лишние ветви, не относящиеся к выигрышной стратегии.
Дерево, являющееся частью ответа на пункт 3, представлено с использованием ссылок на
фрагменты, являющиеся решениями других пунктов задания.
В задании спрашивается, в частности, кто выиграет, а в ответе не указан в явном виде выигрывающий игрок. На все вопросы, поставленные в задании, должны быть даны чёткие ответы. Ответ на вопрос о выигрышной стратегии в стиле «Может выиграть первый игрок, но если он неправильно пойдёт, то выиграет второй» является ошибочным, поскольку выигрышная стратегия одного игрока не оставляет возможности победы другому игроку»
ФГБНУ «Федеральный институт педагогических измерений»
* Некоторые изображения и примеры страницы взяты из материалов презентации К. Полякова
Теория игр. Поиск выигрышной стратегии
Для решения 19 задания необходимо вспомнить следующие темы и понятия:
- для того чтобы найти выигрышную стратегию в несложных играх, достаточно использовать метод перебора всех возможных вариантов ходов игроков;
- для решения задач 19 задания чаще всего для этого применяется метод построения деревьев;
- если от каждого узла дерева отходят две ветви, т.е. возможные варианты хода, то такое дерево называется двоичным (если из каждой позиции есть три варианта продолжения, дерево будет троичным).
- все позиции в простых играх делятся на выигрышные и проигрышные;
- выигрышная позиция – это такая позиция, в которой игрок, делающий первый ход, обязательно выиграет при любых действиях соперника, если не допустит ошибки; при этом говорят, что у данного игрока есть выигрышная стратегия – алгоритм выбора очередного хода, позволяющий ему выиграть;
- если игрок, делающий первый ход, находится в проигрышной позиции, то он обязательно проиграет, если ошибку не сделает его оппонент; в этом случае говорят, что у данного игрока нет выигрышной стратегии; таким образом, общая стратегия игры состоит в том, чтобы своим ходом создать проигрышную позицию для оппонента;
- выигрышные и проигрышные позиции характеризуются так:
- позиция, из которой все возможные ходы ведут в выигрышные позиции – проигрышная;
- позиция, из которой хотя бы один из последующих возможных ходов ведет в проигрышную позицию — выигрышная, при этом стратегия игрока состоит в том, чтобы перевести игру в эту проигрышную (для оппонента) позицию.
- для того чтобы определить, какой из игроков выиграет при стратегически правильной игре, необходимо ответить на вопросы:
- Может ли какой-либо из игроков выиграть, независимо от ходов других игроков?
- Что должен сделать игрок с выигрышной стратегией первым ходом, чтобы он смог выиграть, независимо от действий ходов игроков?
Выигрышная стратегия
Выигрышные и проигрышные позиции
Кто выиграет при стратегически правильной игре?
Рассмотрим пример:
Игра: в кучке лежит 5 спичек; играют два игрока, которые по очереди убирают спички из кучки; условие: за один ход можно убрать 1 или 2 спички; выигрывает тот, кто оставит в кучке 1 спичку
Решение:
- Будем использовать метод построения дерева. Первый играющий может убрать одну спичку (в этом случае их останется 4) или сразу 2 (останется 3), эти два варианта отобразим при помощи дерева:
- если первый игрок оставил 4 спички, второй может своим ходом оставить 3 или 2; а если после первого хода осталось 3 спички, второй игрок может выиграть, взяв две спички и оставив одну:
- если осталось 3 или 2 спички, то 1-ый игрок (в обеих ситуациях) выиграет своим ходом:
- если первый игрок своим первым ходом взял две спички, то второй сразу выигрывает; если же он взял одну спичку, то своим вторым ходом он может выиграть, независимо от хода второго игрока;
- итак, убрав всего одну спичку первым ходом, 1-ый игрок всегда может выиграть на следующем ходу;
- тогда как второй игрок не может выиграть, независимо от действий первого: потому что, если первый игрок сначала убрал одну спичку, второй всегда проиграет.
проанализируем стратегию игры:
Ответ: при правильной игре (стратегии игры) выиграет первый игрок; для этого ему достаточно своим первым ходом убрать одну спичку.
Решение 19, 20, 21 заданий ЕГЭ по информатике
Плейлист видеоразборов задания на YouTube:
Задание демонстрационного варианта 2022 года ФИПИ
Игра с двумя кучами камней или табличка
19_8:
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 59. Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах будет 59 или больше камней.
В начальный момент в первой куче было 5 камней, во второй куче – S
камней; 1 ≤ S ≤ 53
.
Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S
, когда такая ситуация возможна.
Задание 20 ЕГЭ.
Найдите минимальное значение S
, при котором у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
− Петя не может выиграть за один ход;
− Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Задание 21 ЕГЭ.
Найдите два значения S
, при которых одновременно выполняются два условия:
– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Найденные значения запишите в ответе в порядке возрастания.
✍ Решение:
- Нарисуем таблицу, в первом столбце которой будем откладывать количество камней в первой куче, а в первой строке — количество камней во второй куче. Получим матрицу. Поскольку в первой куче количество начинается с 5, то это и будет первым значением в таблице. Во второй куче начнем с наибольшего возможного числа — 53. Таблица пригодится для решения заданий 20 и 21:
- Для начала найдем все выигрышные позиции для первой строки таблицы, т.е. для первого хода. Обозначим их плюсами (
+
): - Для того, чтобы получить наименьшее значение
S
, в качестве первого хода Пети необходимо увеличивать в два раза вторую кучу. Т.е. для решения задания необходимо найти такое наименьшееS
, при котором Петя походил неверно, и попал своим ходом в выигрышную позицию для своего соперника, т.е. в ячейку с плюсом:
Выигрышные позиции для первой строки ищем по принципу увеличения количества камней S
в 2 два раза: 5 + S*2 >=59
. Получим S>=27
S = 14 1 ход Петя: 14*2 = (5,28) 2 ход Ваня: 28*2 = (5,56), Сумма = 61, Выигрыш!
Ответ: 14
✎ Задание 20:
- Проанализируем таблицу, и для каждой строки найдем выигрышные позиции с одного хода. Т.е. которые позволят игроку, оказавшемуся «на них», выиграть за один ход (получить суммарно 59 и более камней):
- Найдем проигрышные позиции: те, которые ведут только в выигрышные позиции для соперника (ведут только в плюсы)
- В задании требуется найти минимальное
S
, котором выиграет Петя, но выиграет он НЕ первым своим ходом, а вторым. То есть в нашем случае необходимо найтиS
, которое может перевести соперника в проигрышную позицию. То есть в минус. Для первой строки (так как первым будет ходить Петя) таких значений два: - Наименьшее S = 24
При заполнении таблицы выигрышными позициями можно проследить закономерность «узора», а заполнять позиции по аналогии.
Проигрышные позиции: (6,26) (8,25) (10,24) (12,23) (14,22)
- Для решения этого задания найдем выигрышные позиции со второго хода, т.е. которые могут перевести соперника в проигрышную позицию (с минусом):
- Чтобы выиграл Ваня, но выиграл не первым ходом, а вторым, необходимо, чтобы Петя находился в такой позиции, которая ведет его только на выигрышные позиции со второго хода:
Ответ: 23 25
>19_9:
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя.
За один ход игрок может убрать из одной из куч один камень или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается).
Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из четырёх позиций: (5, 9), (3, 9), (6, 8), (6, 5).
Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 20. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 20 или меньше камней. В начальный момент в первой куче было 10 камней, во второй куче – S
камней, S > 10.
Найдите значение S
, при котором Ваня выигрывает своим первым ходом при любой игре Пети?
Задание 20 ЕГЭ.
Найдите минимальное и максимальное значение S
, при котором у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
− Петя не может выиграть за один ход;
− Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.
Задание 21 ЕГЭ.
Найдите значение S
, при котором одновременно выполняются два условия:
– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
✍ Решение (Excel):
✎ Задание 19:
- В столбце
А
отложим значения — количество камней в первой куче. Начнем с ячейкиА2
, в которую внесем начальное количество камней, т.е. 10. Автозаполнением продлим значения вниз до 0: - В строке 1 таблицы (начиная с ячейки
B1
) отложим значения для второй кучи. Поскольку в задании говорится, что победа будет достигнута при S<=20, и достигнуть этого значения более сильной командой можно уменьшив кол-во камней во второй куче в два раза, начиная с числа 40: 40/20. То есть возьмем значение больше 40, примерно 45. Используем автозаполнение до значения 11: - Из двух команд, которые могут выполнять игроки, выберем наиболее сильную, т.е. благодаря которой можно быстрее достичь выигрышного диапазона и попасть в значения S<=20. Это команда уменьшения количества камней в два раза, т.е.
/2
. - Для каждой из ячеек полученной таблицы рассчитаем значение, полученное в результате уменьшения в два раза той кучи камней, в которой большее количество камней (так как это даст меньший результат). Например, для ячейки
С5
, в которой игрок имеет в первой куче 7 камней, а во второй куче 44 камня, мы бы выполнили действие 44/2+7. Т.е. уменьшили вдвое вторую кучу, т.к. в ней больше камней. Еще необходимо обращать внимание на четность и нечетность значений (в Excel это функцияЕНЕЧЁТ
— возвращает ИСТИНУ, если значение нечетно). - Чтобы автоматизировать процесс необходимо использовать формулу, в которой найдем максимальное значение из двух вариантов:
Минимальное из (ЕСЛИ
(ЕНЕЧЁТ(1-я куча)то
(1-я куча+1)/2+2-я куча,иначе
1-я куча/2+2-я куча);ЕСЛИ
(ЕНЕЧЁТ(2-я куча)то
(2-я куча+1)/2+1-я куча,иначе
2-я куча/2+1-я куча)).
B2
:= МИН(ЕСЛИ(ЕНЕЧЁТ($A2);($A2+1)/2+B$1;$A2/2+B$1);ЕСЛИ(ЕНЕЧЁТ(B$1);(B$1+1)/2+$A2;B$1/2+$A2))
$
будем использовать для фиксации столбца А
и строки 1
при копировании формулы.
Ответ: 21
✎ Задание 20:
- Продолжаем работать с той же таблицей, что и в задании 19. Выделим все проигрышные позиции (из которых можно походить только в выигрышные позиции для соперника, т.е. в выделенные ячейки):
- Петя может выиграть свои вторым ходом, если он не может выиграть первым ходом, но может выполнить ход в позицию, проигрышную для соперника (в ячейку, выделенную красным). Такие позиции назовем выигрышные позиции со второго хода. Найдем минимальное и максимальное значение
S
при таком первом ходе Пети:
При S=44 Пете необходимо уменьшить 2-ю кучу вдвое (44/2 = 22), чтобы оказаться в проигрышной позиции для соперника.
Ответ: 22 44
✎ Задание 21:
- Выделим все такие выигрышные позиции со второго хода:
- Далее придерживаемся следующей логики: Ваня сможет выиграть свои первым или вторым ходом, но при этом не гарантированно первым ходом, если у Пети будет возможность выполнить ходы только в позиции выигрышные со второго хода. Найдем такое S:
При S = 24 Петя сможет уменьшить кучи на один камень, и тогда оказывается в выделенной зеленой области — выигрышные позиции со второго хода для Вани, либо уменьшить количество камней вдвое, и тогда Ваня оказывается в выигрышной позиции с первого хода (розовая область).
Ответ: 24
19_7: с экзамена ЕГЭ 2020г. (со слов учащегося):
Два игрока, Петя и Ваня, играют в следующую игру. На табличке написаны два значения. Оба игрока в свой ход могут заменить одно из значений на сумму обеих (по своему выбору). Первый ход делает Петя. Игра считается законченной когда сумма обеих значений равняется не меньше 56. То есть выигрывает игрок, получивший 56 или более в сумме. Начальное значение (10, S).
Найдите максимальное S при котором Петя не может выиграть первым ходом.
Задание 20 ЕГЭ.
У кого из игроков есть выигрышная стратегия при начальном значении (9, 15).
Задание 21 ЕГЭ.
У кого из игроков есть выигрышная стратегия при начальном значении (3,7)? Опишите эту стратегию и изобразите дерево всех возможных партий
при этой стратегии
.
Типовые задания для тренировки
✍ Решение:
- Задание 19.
Максимальное S при котором Петя НЕ может выиграть своим первым ходом S = 22. Петя проиграет, если в сумме получится 55 и меньше. Первое значение = 10, необходимо найти второе значение, при этом максимальное. Схематично отобразим варианты ходов:
(10,22) - ход Пети - (10+22, 22) - итог суммы обеих значений таблички: 32 + 22 = 54 (<56)
Для того, чтобы сделать сумму большей, Петя заменит первое значение на сумму, так как оно меньше второго значения (10<22)
В начальной позиции (9, 15) выигрышная стратегия есть у Вани. Для себя отобразим схематично выигрышную партию Вани:
Зеленым цветом выделены выигрышные ходы.
В начальной позиции (3, 7) выигрышная стратегия есть у Вани. Изобразим дерево всех возможных партий при этой стратегии (раз говорится «при этой стратегии» имеем в виду, выигрышную стратегию Вани):
Дерево для выигрышной стратегии Вани: для Вани отображены только ходы по стратегии, для Пети — все возможные ходы. Зеленым цветом — выигрышный ход, красная обводка — ход по стратегии.
Решение подобного задания в Excel смотрите на видео:
📹 Видео
📹 Видеорешение на RuTube здесь
19_6:
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) два камня или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 44.
Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, что в кучах всего будет 44 или больше камней.
В начальный момент в первой куче было 5 камней, во второй куче – S камней; 1 ≤ S ≤ 38.
Задание 19 ЕГЭ.
При каких S: 1а) Петя выигрывает первым ходом; 1б) Ваня выигрывает первым ходом?
Задание 20 ЕГЭ.
Назовите одно любое значение S, при котором Петя может выиграть своим вторым ходом.
Задание 21 ЕГЭ.
Назовите значение S, при котором Ваня выигрывает своим первым или вторым ходом.
✍ Решение:
- Нарисуем таблицу, в первом столбце которой будем откладывать количество камней в первой куче, а в первой строке — количество камней во второй куче. Получим матрицу. Поскольку в первой куче количество начинается с 5, то это и будет первым значением в таблице. Во второй куче начнем с наибольшего возможного числа — 38:
- Далее будем рассуждать так: Петя может выиграть первым ходом, выполнив команду *2 (увеличить количество камней в куче в два раза), если вместо S (кол-во камней во второй куче), мы будем изменять значение, начиная от 20, до последнего возможного по условию значения 38:
Задание 19 а):
5 + 20*2 = 45 (>44) * 5 - кол-во камней в первой куче, оно не меняется по условию
+
означает выигрышную позицию с первого хода:Ответ 1 а):
S = [20;38] (На ЕГЭ пояснить ходы, например: (5; 20) -> (Ход Пети)-> (5;40); 40 + 5 = 45)
Задание 19 б):
+
). Отметим такие позиции, учитывая, что это первый ход Пети, и кол-во камней в первой куче должно быть 5. Найденные позиции будут проигрышными позициями (-
):S = 19 (На ЕГЭ пояснить ходы, например: (5; 19) -> (Ходы Пети): (5;21),(5;28);(7;19);(7;28). Везде следующим ходом выиграет Ваня, см. предыдущ. пункт)
Задание 20:
2+
):
S = 16, 17 или 18 (На ЕГЭ пояснить ходы, ссылаясь на объяснения в предыдущих пунктах)
Задание 21:
+
), либо в позицию выигрышную со второго хода или n-го хода (2+
). Это позиция при S = 14:
Ответ 3: S = 14 (На ЕГЭ пояснить ходы, ссылаясь на объяснения в предыдущих пунктах)
📹 YouTube здесь
Видеорешение на RuTube здесь
Задания для тренировки 19, 20, 21 заданий ЕГЭ (взяты из КИМ и сборников прошлых лет)
Игра с одной кучей камней
19_3: Демоверсия ЕГЭ 2018 информатика:
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. Например, имея кучу из 15 камней, за один ход можно получить кучу из 16 или 30 камней. У каждого игрока, чтобы делать ходы, есть неограниченное количество камней.
Игра завершается в тот момент, когда количество камней в куче становится не менее 29. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 29 или больше камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 28.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока — значит описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. В описание выигрышной стратегии не следует включать ходы играющего по этой стратегии игрока, не являющиеся для него безусловно выигрышными, т.е. не являющиеся выигрышными независимо от игры противника.
Задание 19 ЕГЭ
а) Укажите такие значения числа S, при которых Петя может выиграть в один ход.
б) Укажите такое значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом. Опишите выигрышную стратегию Вани.
Задание 20 ЕГЭ
Укажите два таких значения S, при которых у Пети есть выигрышная стратегия, причем:
— Петя не может выиграть за один ход;
— Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Для указанных значений S опишите выигрышную стратегию Пети.
Задание 21 ЕГЭ
Укажите значение S, при котором:
— у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
— у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Для указанного значения S опишите выигрышную стратегию Вани. Постройте дерево всех партий, возможных при этой выигрышной стратегии (в виде рисунка или таблицы). На ребрах дерева указывайте, кто делает ход; в узлах — количество камней в позиции
Дерево не должно содержать партий, невозможных при реализации выигрывающим игроком своей выигрышной стратегии. Например, полное дерево игры не является верным ответом на это задание.
✍ Решение:
-
Задание 19.
- а) Петя может выиграть, если S = 15, … 28
15, ..., 28 - выигрышные позиции с первого хода
S = 14 Петя: 14 + 1 = 15 выигрышная позиция (см. п. а). Выигрывает Ваня Петя: 14 * 2 = 28 выигрышная позиция (см. п. а). Выигрывает Ваня 14 - проигрышная позиция
Задание 20.
S = 7 Петя: 7 * 2 = 14 проигрышная позиция (см. п. 1 б). Выигрывает Петя S = 13 Петя: 13 + 1 = 14 проигрышная позиция (см. п. 1 б). Выигрывает Петя 7, 13 - выигрышные позиции со второго хода
Задание 21.
S = 12 Петя: 12 + 1 = 13 Ваня: 13 + 1 = 14 проигрышная позиция (см. п. 1 б). Выигрывает Ваня вторым ходом!
В таблице изображено дерево возможных партий (и только их) при описанной стратегии Вани. Заключительные позиции (в них выигрывает Ваня) подчеркнуты. На рисунке это же дерево изображено в графическом виде.
Дерево всех партий, возможных при стратегии Вани:
* красный круг означает выигрыш
19_4: Досрочный егэ по информатике 2018, вариант 1. Задание 19:
Два игрока, Паша и Вася, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Паша. За один ход игрок может добавить в кучу один или четыре камня или увеличить количество камней в куче в пять раз. Игра завершается в тот момент, когда количество камней в куче становится не менее 69.
Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 69 или больше камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 68.
а) Укажите все такие значения числа S, при которых Паша может выиграть в один ход. Обоснуйте, что найдены все нужные значения S, и укажите выигрывающий ход для каждого указанного значения S.
б)Укажите такое значение S, при котором Паша не может выиграть за один ход, но при любом ходе Паши Вася может выиграть своим первым ходом. Опишите выигрышную стратегию Васи.
Задание 20 ЕГЭ.
Укажите 2 таких значения S, при которых у Паши есть выигрышная стратегия, причём Паша не может выиграть за один ход и может выиграть своим вторым ходом независимо от того, как будет ходить Вася. Для каждого указанного значения S опишите выигрышную стратегию Паши.
Задание 21 ЕГЭ.
Укажите хотя бы одно значение S, при котором у Васи есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Паши, и у Васи нет стратегии, которая позволит ему гарантированно выиграть первым ходом. Для указанного значения S опишите выигрышную стратегию Васи. Постройте дерево всех партий, возможных при этой выигрышной стратегии Васи (в виде рисунка или таблицы).
Типовые задания для тренировки
✍ Решение:
-
19.
а) S ≥ 14. При количестве камней в куче от 14 и выше Паше необходимо увеличить их количество в пять раз, тем самым получив 70 или более камней.
S ≥ 14 выигрышные позиции
б) S = 13. Паша своим первым ходом может сделать 14, 17 или 65 камней, после этого Вася увеличивает количество в пять раз, получая 70, 85 или 325 камней в куче.
S = 13 Паша 1 ход: 13 + 1 = 14 Паша 1 ход: 13 + 4 = 17 Паша 1 ход: 13 * 5 = 65 Ваня 1 ход: [14, 17, 65] * 5 = S ≥ 14 Ваня выигрывает 13 - проигрышная позиция
20. S = 9, 12. Для данных случаев Паше необходимо прибавить 4 камня к куче из 9 камней, либо 1 камень к куче из 12, и получить кучу из 13 камней.
После чего игра сводится к стратегии, описанной в пункте 1б.
S = 13 Паша 1 ход: 9 + 4 = 13 Паша выигрывает Паша 1 ход: 12 + 1 = 13 Паша выигрывает 9, 12 - выигрышные позиции со второго хода
21. S = 8. Своим первым ходом Паша может сделать количество камней в куче 9, 12 или 40. Если Паша увеличивает кол-во в пять раз, тогда Вася выигрывает своим первым ходом, увеличивая количество камней в пять раз.
Для случая 9 и 12 камней Вася использует стратегию, указанную в п.2.
S = 8 Паша 1 ход: 8 + 1 = 9 Ваня Выигрывает (см. п.2) Паша 1 ход: 8 + 4 = 12 Ваня Выигрывает (см. п.2) Паша 1 ход: 8 * 5 = 40
Аналитическое решение 19 задания смотрите на видео:
📹 YouTube здесь
Видеорешение на RuTube здесь
19_1:
Два игрока, Паша и Валя, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Паша. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. Например, имея кучу из 7 камней, за один ход можно получить кучу из 14 или 8 камней. У каждого игрока, чтобы сделать ход, есть неограниченное количество камней.
Игра завершается в тот момент, когда количество камней в куче становится не менее 28. Если при этом в куче осталось не более 44 камней, то победителем считается игрок, сделавший последний ход. В противном случае победителем становится его противник. Например, если в куче было 23 камня, и Паша удвоит количество камней в куче, то игра закончится и победителем будет Валя. В начальный момент в куче было S камней, 1≤ S ≤ 27.
Задание 19 ЕГЭ
а) При каких значениях числа S Паша может выиграть в один ход? Укажите все такие значения и соответствующие ходы Паши.
б) У кого из игроков есть выигрышная стратегия при S = 26, 25, 24? Опишите выигрышные стратегии для этих случаев.
Задание 20 ЕГЭ
У кого из игроков есть выигрышная стратегия при S = 13, 12? Опишите соответствующие выигрышные стратегии.
Задание 21 ЕГЭ
У кого из игроков есть выигрышная стратегия при S = 11? Постройте дерево всех партий, возможных при этой выигрышной стратегии (в виде рисунка или таблицы). На ребрах дерева указывайте, кто делает ход; в узлах — количество камней в позиции.
✍ Решение:
а) Паша имеет выигрышную стратегию и может выиграть за один ход, если S = 27: тогда ему достаточно добавить один камень, чтобы игра закончилась при 28 камнях в куче; или если S = 14, 15, 16, 17, 18, 19, 20, 21, 22 (44/2 = 22 и 28/2 = 14, т.е. от 14 до 22): тогда необходимо удвоить кучу.
S=27 Паша: 27 + 1 = 28 - Выигрыш! 27 - выигрышная позиция
б) При S = 26 выигрышная стратегия есть у Вали. Паша делает ход первым, у него есть возможность либо удвоить количество камней в куче, и тогда количество превысит 44, — выигрывает Валя; либо увеличить количество на один камень, станет 27 камней: следующая Валя, — она может положить один камень и выиграть.
S=26 Паша: 26 * 2 = 52 Валя выигрывает! или: Паша: 26 + 1 = 27 Валя: 27 + 1 = 28 - Выигрыш! 26 - проигрышная позиция
При S = 25 выигрышная стратегия есть у Паши. Удваивать количество камней нет смысла, т.к. количество превысит 44, значит, Паша добавит один камень, их станет 26, следующая Валя, — она может либо добавить камень (станет 27 камней, следующим ходом выиграет Паша) либо удвоить — и сразу проиграть, т.к. станет более 44 камней.
S=25 Паша: 25 + 1 = 26 Валя: 26 ... проигрышная позиция (см. выше) Паша выигрывает! 25 - выигрышная позиция
При S = 24 выигрышная стратегия есть у Вали. Паша делает ход первым: удваивать кучу нет смысла, т.к. в ней станет более 44, значит, Паша добавит один камень, их станет 25; следующая — Валя: она может только добавить один камень (станет 26 камней, следующим ходом Паша оказывается в проигрышной позиции, см. пункт при S = 26).
S=24 Паша: 24 + 1 = 25 Валя: 25 ... выигрышная позиция (см. выше) Валя выигрывает! 24 - проигрышная позиция
Задание 20 ЕГЭ:
При S = 13 или S = 12 выигрышная стратегия есть у Паши. Паша удваивает количество и в куче остается 26 или 24 камня. Это проигрышная позиция для того, кто ходит (см. п. 1 б), а следующий ход за Валей.
Задание 21 ЕГЭ:
При S = 11 выигрышная стратегия есть у Вали. Паша делает первый ход: в куче остается либо 22, либо 12 камней. Обе эти позиции выигрышные для того, кто ходит. При S = 12 последовательность игры описана в пункте 2, а при S = 22 — в пункте 1а.
Дерево возможных партий:
* Для Вали отображены только ходы по стратегии
** красный круг означает выигрыш
*** фиолетовый круг — конец игры (проигрыш)
Подробное объяснение 19 задания ЕГЭ смотрите на видео (аналитическое решение):
📹 YouTube здесь
Видеорешение на RuTube здесь
Игра с двумя кучами камней или табличка
19_5:
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 73.
Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, что в кучах всего будет 73 камня или больше.
Задание 1.
Для каждой из начальных позиций (6, 33), (8, 32) укажите, кто из игроков имеет выигрышную стратегию. В каждом случае опишите выигрышную стратегию; объясните, почему эта стратегия ведёт к выигрышу, и укажите, какое наибольшее количество ходов может потребоваться победителю для выигрыша при этой стратегии.
Задание 2.
Для каждой из начальных позиций (6, 32), (7, 32), (8, 31) укажите, кто из игроков имеет выигрышную стратегию.
Задание 3.
Для начальной позиции (7, 31) укажите, кто из игроков имеет выигрышную стратегию. Постройте дерево всех партий, возможных при указанной вами выигрышной стратегии. Представьте дерево в виде рисунка или таблицы.
✍ Решение:
- Задание 1. В начальных позициях (6, 33), (8, 32) выигрышная стратегия есть у Вани.
- Задание 2. В начальных позициях (6, 32), (7, 32) и (8, 31) выигрышная стратегия есть у Пети.
- Задание 3. В начальной позиции (7, 31) выигрышная стратегия есть у Вани.
Видео решения 19 задания с двумя кучами (аналитическое решение):
📹 YouTube здесь
Видеорешение на RuTube здесь
Игра с набором слов
19_2: 2017 год (один из вариантов со слов выпускника):
Петя и Ваня играют в игру: есть набор слов, необходимо последовательно называть буквы этих слов. Побеждает тот игрок, который называет последнюю букву любого слова из набора. Петя ходит первым.
Например, есть набор слов {Волк, Информатика, Страшно}; для заданного набора слов Петя своим первым ходом может назвать букву В, И или С. Если Петя выберет букву В, то победит Ваня (следующие ходы: Петя — В, Ваня — О, Петя — Л, Ваня — К).
Задание 1
А) Даны 2 слова (набора букв) {ИКЛМНИКЛМНХ, НМЛКИНМЛКИ}. Определить выигрышную стратегию.
Б) Даны 2 слова {ТРИТРИТРИ…ТРИ, РИТАРИТАРИТАРИТА…РИТА}. В первом слове 99 букв, во втором 164. Определить выигрышную стратегию.
Задание 2
Необходимо поменять две буквы местами из набора пункта 1А в слове с наименьшей длинной так, чтобы выигрышная стратегия была у другого игрока. Объяснить выигрышную стратегию.
Задание 3
Дан набор слов {Ворона, Волк, Волна, Производная, Прохор, Просо}. У кого из игроков есть выигрышная стратегия? Обосновать ответ и написать дерево всех возможных партий для выигрышной стратегии.
✍ Решение:
- Если поменять местами во втором слове (НМЛКИНМЛКИ) буквы Н и И, то получится следующий набор слов:
{ИКЛМНИКЛМНХ, ИМЛКННМЛКИ}
Для данного набора выигрышная стратегия есть у Вани. Петя в любом случае должен будет выбрать букву И, а Ваня следующим ходом может перевести игру в проигрышную позицию для Пети, т.е. перейти на второе слово, назвав букву М. Такая стратегия приведет Ваню к выигрышу, так как последнюю букву слова — И — запишет именно он.
- Выигрышная стратегия есть у Вани, так как при любом выборе Пети, Ваня может перевести игру в проигрышную позицию для Пети, т.е. «перейти» на слово с четным количеством букв. Такая стратегия позволит Ване написать последнюю букву и тем самым выиграть игру.
А) Для выигрыша Пете достаточно выбрать первую букву слова с нечетным количеством букв, тогда последний ход делает Петя. При исходном наборе слов выигрышная стратегия есть у Пети. Она заключается в том, что своим первым ходом он должен выбрать букву И (слово ИКЛМНИКЛМНХ из 11 букв). Ване придется выбрать букву К. Таким образом, они последовательно будут называть буквы первого слова, пока Петя не выберет последнюю букву Х. На этом игра закончится выигрышем Пети. При данной стратегии возможна только одна партия. Заключением партии будет написано слово ИКЛМНИКЛМНХ.
Б) При исходном наборе слов выигрышная стратегия есть у Пети. Она заключается в том, чтобы выбрать слово с нечетным количеством букв, т.к. при такой стратегии последнюю букву в любом случае записывает Петя. Т.о., Петя должен выбрать букву Т, т.к. в первом слове 99 букв.
Дерево возможных партий:
* Для Вани отображены только ходы по стратегии
** Красный круг означает выигрыш
Подробней с решением задания про слова ознакомьтесь в видеоуроке (аналитическое решение):
📹 YouTube здесь
Видеорешение на RuTube здесь
ЕГЭ информатика 19-21 задание разбор, теория, как решать.
Теория игр, выигрышная стратегия, 19.(Б) — 1 балл, 20.(П) — 1 балл, 21.(В) — 1 балл
Е19-21.31 когда количество камней в куче становится не менее 129
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается …
Читать далее
Е19-21.31 Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 211.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока …
Читать далее
Е19-21.30 когда количество камней в куче становится не менее 29
Игра завершается в тот момент, когда количество камней в куче становится не менее 29. Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. …
Читать далее
Е19-21.29 когда суммарное количество камней в кучах становится не менее 44
когда суммарное количество камней в кучах становится не менее 44 Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) два камня или увеличить количество камней в куче в …
Читать далее
Е19-21.28 Игра завершается в тот момент, когда количество камней в куче становится не менее 84.
Игра завершается в тот момент, когда количество камней в куче становится не менее 84. Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или четыре камня или увеличить количество камней в куче в …
Читать далее
Е19-21.27 добавить в кучу один камень, два камня, увеличить количество камней
добавить в кучу один камень, два камня, увеличить количество камней. Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может а) добавить в кучу один камень; б) добавить в кучу два камня; г) увеличить количество камней в куче …
Читать далее
Е19-21.26 добавить в кучу один камень, два камня, три камня; увеличить количество камней
добавить в кучу один камень, два камня, три камня; увеличить количество камней в куче в два раза. Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может а) добавить в кучу один камень; б) добавить в кучу два …
Читать далее
Е19-21.25 добавить в кучу два камня, добавить в кучу три камня или увеличить
добавить в кучу два камня, добавить в кучу три камня или увеличить. Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу два камня, добавить в кучу три камня или увеличить количество камней в куче …
Читать далее
Е19-21.24 добавить в кучу три камня или увеличить количество камней в куче в два раза
добавить в кучу три камня или увеличить количество камней в куче в два раза. Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу три камня или увеличить количество камней в куче в два раза. …
Читать далее
Е19-21.23 когда количество камней в куче становится не менее 25
Игра завершается в тот момент, когда количество камней в куче становится не менее 25. Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу два камня или увеличить количество камней в куче в два раза. …
Читать далее
Теория игр
19
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч один камень, увеличить количество камней в первой куче в два раза или увеличить количество камней во второй куче в три раза. Например, пусть в одной куче 6 камней, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из четырёх позиций: (7, 9), (12, 9), (6, 10), (6, 27). Чтобы делать
ходы, у каждого игрока есть неограниченное количество камней.
Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 69. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 69 или больше камней.
В начальный момент в первой куче было 10 камней, во второй куче — S камней, 1 ≤ S ≤ 58.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока — значит, описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. В описание выигрышной стратегии не следует включать ходы играющего по ней игрока, которые не являются для него безусловно выигрышными, т.е не гарантирующие выигрыш независимо от игры противника.
Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
def f(x, y, p): #Рекурсивная функция if x + y >= 69 or p > 3: #Условия завершения игры return p == 3 return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий for s in range (1, 58 + 1): #Перебор S if f(10, s, 1): #Начали с 10 камней print(s) break20
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч один камень, увеличить количество камней в первой куче в два раза или увеличить количество камней во второй куче в три раза. Например, пусть в одной куче 6 камней, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из четырёх позиций: (7, 9), (12, 9), (6, 10), (6, 27). Чтобы делать ходы, у каждого игрока есть неограниченное количество камней.
Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 69. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 69 или больше камней.
В начальный момент в первой куче было 10 камней, во второй куче — S камней, 1 ≤ S ≤ 58.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока — значит, описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. В описание выигрышной стратегии не следует включать ходы играющего по ней игрока, которые не являются для него безусловно выигрышными, т.е не гарантирующие выигрыш независимо от игры противника.
Найдите два таких значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
— Петя не может выиграть за один ход;
— Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без разделительных знаков.
def f(x, y, p): #Рекурсивная функция if x + y >= 69 or p > 4: #Условия завершения игры return p == 4 if p % 2 != 0: return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий else: return f(x + 1, y, p + 1) and f(x, y + 1, p + 1) and f(x * 2, y, p + 1) and f(x, y * 3, p + 1) #Варианты действий for s in range (1, 58 + 1): #Перебор S if f(10, s, 1): #Начали с 10 камней print(s)
19 - 2 кучиdef e(x1,x2,s): if x1+x2>=77 and s==3: return True else: if x1+x2<77 and s==3: return False return e(x1+1,x2,s+1) or e(x1,x2+1,s+1) or e(x1*2,x2,s+1) or e(x1,x2*2,s+1) for i in range (1,150+1): if e(7,i,1): print(i) break
20 - 2 кучи
def e(x1,x2,s): if x1+x2>=77 and s==4: return True else: if x1+x2<77 and s==4: return False else: if x1+x2>=77: return False if s%2==1: return e(x1+1,x2,s+1) or e(x1,x2+1,s+1) or e(x1*2,x2,s+1) or e(x1,x2*2,s+1) else: return e(x1+1,x2,s+1) and e(x1,x2+1,s+1) and e(x1*2,x2,s+1) and e(x1,x2*2,s+1) for i in range (1,150+1): if e(7,i,1): print(i)
21
def f(x,y,p): if x+y>=142 and (p==5 or p==3): return True else: if x+y<142 and p==5: return False else: if x+y>=142: return False if p%2==0: return f(x+2,y,p+1) or f(x*2,y,p+1) or f(x,y+2,p+1) or f(x,y*2,p+1) else: return f(x+2,y,p+1) and f(x*2,y,p+1) and f(x,y+2,p+1) and f(x,y*2,p+1) def f1(x,y,p): if x+y>=142 and p==3: return True else: if x+y<142 and p==5: return False else: if x+y>=142: return False if p%2==0: return f1(x+2,y,p+1) or f1(x*2,y,p+1) or f1(x,y+2,p+1) or f1(x,y*2,p+1) else: return f1(x+2,y,p+1) and f1(x*2,y,p+1) and f1(x,y+2,p+1) and f1(x,y*2,p+1) for i in range(1,150+1): if f(2,i,1): print (i) for i in range(1,150+1): if f1(2,i,1): print (i)
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч один камень, увеличить количество камней в первой куче в два раза или увеличить количество камней во второй куче в три раза. Например, пусть в одной куче 6 камней, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из четырёх позиций: (7, 9), (12, 9), (6, 10), (6, 27). Чтобы делать
ходы, у каждого игрока есть неограниченное количество камней.
Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 69. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 69 или больше камней.
В начальный момент в первой куче было 10 камней, во второй куче — S камней, 1 ≤ S ≤ 58.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока — значит, описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. В описание выигрышной стратегии не следует включать ходы играющего по ней игрока, которые не являются для него безусловно выигрышными, т.е не гарантирующие выигрыш независимо от игры противника.
Найдите минимальное значение S, при котором одновременно выполняются два условия:
— у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
— у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
def f(x, y, p): #Рекурсивная функция if x + y >= 69 or p > 5: #Условия завершения игры return p == 3 or p == 5 if p % 2 == 0: return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий else: return f(x + 1, y, p + 1) and f(x, y + 1, p + 1) and f(x * 2, y, p + 1) and f(x, y * 3, p + 1) #Варианты действий
for s in range (1, 58 + 1): #Перебор S if f(10, s, 1): #Начали с 10 камней print(s)
1.
РЕШЕНИЕ ЗАДАНИЙ 19-21
ПРОГРАММИРОВАНИЕМ
суммарное время решения задач 19-21: 22 минуты
2.
ПОРЯДОК РЕШЕНИЯ
Если Вы собираетесь решать задания 19-21 через программирование, то есть 2
варианта:
• начинать решать не с 19-го задания, а с 20-го или с 21-го;
• решить 19-е задание на бумажке, 20 и 21 – через программу.
В любом случае полученные программой ответы нужно проверить вручную,
т.к. в программе нельзя задать условия вот такого типа:
• Петя не может выиграть за один ход, но может выиграть своим вторым
ходом независимо от того, как будет ходить Ваня;
• у Вани нет стратегии, которая позволит ему гарантированно выиграть
первым ходом, но есть выигрышная стратегия, позволяющая ему выиграть
первым или вторым ходом при любой игре Пети.
И в том, и в другом случае программа выдаёт одинаковые числа (2 хода), т.е.
проверять возможность выигрыша за 1 ход нужно самостоятельно.
3.
О ПРОГРАММЕ
Есть несколько способов написать программу для решения задачи,
наиболее оптимальной по времени будет программа, решающая задачу
с помощью динамического программирования и сохраняющая
результаты в таблицу. В программе оба игрока не допускают ошибок
при игре, т.е. её можно использовать как для определения выигрышных
позиций как Вани, так и Пети.
Те места в программе, которые нужно будет менять в зависимости от
условий задачи, будут выделены жёлтым маркером. Всё остальное
остаётся неизменным (по крайней мере для решения задач 20-21).
Значения чисел в итоговой таблице:
Х – выигрыш Пети за Х ходов (например, 2 это выигрыш Пети за 2 хода);
-X – выигрыш Вани за Х ходов (например, -3 это выигрыш Вани за 3
хода).
4.
СТРУКТУРА ПРОГРАММЫ
1) создание таблицы, в которой будут храниться результаты игры;
2) рекурсивное заполнение таблицы с результатами (при этом
смысл чисел в таблице меняется: если в итоговом выводе число
5 означает победу Пети на 5 ходе, то при рекурсивном
заполнении таблицы число 5 в проверке будет означать
выигрыш Вани на 5 ходе, а не Пети);
3) вывод результатов (при этом никак не помечается, мог ли игрок
выиграть за меньшее количество ходов при другой игре
соперника: результаты нужно перепроверять вручную, в ответ
попадает самая длинная игра).
5.
ТИП 1: КОЛИЧЕСТВО
КАМНЕЙ В КУЧАХ
УВЕЛИЧИВАЕТСЯ
6.
1: УСЛОВИЕ
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает
Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два
раза. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 77. Победителем считается игрок,
сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах будет 77 или больше камней. В начальный
момент в первой куче было семь камней, во второй куче – S камней; 1 ≤ S ≤ 69.
Задание 19.
Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая
ситуация возможна.
Задание 20.
Найдите два таких значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
− Петя не может выиграть за один ход;
− Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.
Задание 21
Найдите минимальное значение S, при котором одновременно выполняются два условия:
– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
7.
1: СОЗДАНИЕ ТАБЛИЦЫ
19-е задание пропускаем, сначала решаем 20-е задание.
Код ниже создаёт таблицу из SUMMA*2 строк и SUMMA*2 колонок:
SUMMA = 77
t = [ [0]*2*SUMMA for i in range(2*SUMMA) ]
SUMMA – сумма, при которой завершается игра.
Нумерация колонок и строк таблице начинается с 0.
Если в ячейке таблицы t[x][y] записано число 2, то это означает, что если в начале игры в первой куче
было Х камней, а во второй куче было У камней, то Петя гарантированно побеждает на 2 ходу.
Если в ячейке таблицы t[x][y] записано число -3, то это означает, что если в начале игры в первой куче
было Х камней, а во второй куче было У камней, то Ваня гарантированно побеждает на 3 ходу.
Таблица большая, т.к. разбираются все возможные ходы и есть ходы типа (1; 76) -> (1; 76*2)
8.
1: РЕКУРСИВНОЕ ЗАПОЛНЕНИЕ ТАБЛИЦЫ
Перебираем все возможные сочетания из Х камней в первой куче и У
камней во второй куче. Сумма Х и У не может быть больше 76 (это конец
игры). Начинаем перебирать с конца:
for x in range(SUMMA-1, 0, -1):
for y in range(SUMMA-x-1, 0, -1):
….
Почему перебор начинается именно с конца, мы разбирать не будем:
это нужно для того, чтобы задачу можно было решить рекурсивно.
Изменять порядок перебора нельзя.
9.
1: РЕКУРСИВНОЕ ЗАПОЛНЕНИЕ ТАБЛИЦЫ
Внутри цикла в отдельную переменную сохраним все возможные
ходы Пети:
for x in range(SUMMA-1, 0, -1):
for y in range(SUMMA-x-1, 0, -1):
PetyaHod = [ t[x+1][y], t[2*x][y], t[x][y+1], t[x][2*y] ]
10.
1: РЕКУРСИВНОЕ ЗАПОЛНЕНИЕ ТАБЛИЦЫ
Если в таблице в t[x][y] стоит положительное число, это значит, что при таких Х и У Петя
побеждает. Но в нашем случае Х и У – это числа не ДО Петиного хода, это числа в ПОСЛЕ
Петиного хода, т.е. это начальные условия для Вани. Поэтому если в PetyaHod
оказывается положительное число, Петя не выигрывает, а, наоборот, проигрывает! Петя
будет выигрывать, если в PetyaHod оказалось отрицательное число. Нули тоже считаем
выигрышными для Пети (красивого объяснения здесь нет, это нужно, чтобы таблицу
можно было рекурсивно заполнить):
for x in range(SUMMA-1, 0, -1):
for y in range(SUMMA-x-1, 0, -1):
PetyaHod = [ t[x+1][y], t[2*x][y], t[x][y+1], t[x][2*y] ]
PetyaWin = [V for V in PetyaHod if V <= 0] # выбираем отрицательные числа из PetyaHod
11.
1: РЕКУРСИВНОЕ ЗАПОЛНЕНИЕ ТАБЛИЦЫ
Программа ищет наиболее оптимальные стратегии и для Пети, и для Вани, поэтому если Петя
может выиграть, он будет стараться выиграть и сделать это за наименьшее количество ходов.
Это значит, что он возьмёт самое маленькое отрицательное число из Ваниного результата
(отрицательное – значит, Ваня проиграл, маленькое – значит, проиграл за маленькое число
ходов).
…. # продолжение программы с предыдущего слайда
if PetyaWin:
t[x][y] = -max(PetyaWin) + 1
Если Ваня проиграл за N ходов, то Петя выиграл за N + 1 ход, поэтому к ответу добавляем
единицу. Минус нам нужен, т.к. Ванин проигрыш (для Вани обозначается отрицательным
числом) это Петин выигрыш (для Пети обозначается положительным числом).
12.
1: РЕКУРСИВНОЕ ЗАПОЛНЕНИЕ ТАБЛИЦЫ
Если Петя не может победить, значит, побеждает Ваня. Программа будет играть за Петю
наиболее оптимальным образом (т.е. Петя будет стараться максимально растянуть игру,
надеясь на ошибку противника). Если Ваня победил за N ходов, то Петя проиграл тоже за N
ходов, поэтому:
…. # продолжение программы
if PetyaWin:
t[x][y] = -max(PetyaWin) + 1
else:
t[x][y] = -max(PetyaHod)
Берём максимальное положительное число из PetyaHod, т.к. Петя будет вести максимально
длинную игру при проигрыше, берём со знаком минус, т.к. при безошибочной игре Вани Петя
проигрывает.
13.
1: ВЫВОД ОТВЕТА
…. # продолжение программы
x = 7 # в первой куче 7 камней
for y in range(1, SUMMA-x, 1):
if t[x][y] == 2: # Петя победил на втором ходе
print(y) # выводим начальное количество камней во 2-й куче
Программа выводит всего 2 значения: 31 и 34. В условии просили найти два значения S, при
которых Петя выигрывает вторым своим ходом, но не может выиграть первым. Это значит,
что в данном случае значения 31 и 34 можно не перепроверять: других вариантов у нас всё
равно нет.
Ответ: 31 34
14.
1: ВСЯ ПРОГРАММА (20-Е ЗАДАНИЕ)
SUMMA = 77 # сумма, необходимая для выигрыша
t = [ [0]*2*SUMMA for i in range(2*SUMMA) ]
for x in range(SUMMA-1, 0, -1):
for y in range(SUMMA-x-1, 0, -1):
PetyaHod = [ t[x+1][y], t[2*x][y], t[x][y+1], t[x][2*y] ] # возможные ходы из текущей позиции
PetyaWin = [V for V in PetyaHod if V <= 0]
if PetyaWin:
t[x][y] = -max(PetyaWin) + 1
else:
t[x][y] = -max(PetyaHod)
x = 7 # в первой куче 7 камней
for y in range(1, SUMMA-x, 1):
if t[x][y] == 2: # Петя победил на втором ходе
print(y)
15.
1: РЕШЕНИЕ 21-ГО ЗАДАНИЯ
Т.к. программа играет оптимально и за Ваню, и за Петю, то чтобы найти значения S, при которых Ваня
выигрывает 2-м ходом, достаточно поменять условие в выводе:
…. # продолжение программы
x = 7 # в первой куче 7 камней
for y in range(1, SUMMA-x, 1):
if t[x][y] == -2: # Ваня победил на втором ходу
print(y) # выводим начальное количество камней во 2-й куче
Программа выводит числа 30 и 33. Минимальное число – 30, но нужно проверить, что в таком случае есть
какой-то Петин ход, позволяющий выиграть Ване за 1 ход.
Проверяем: (7, 30) -> (7, 60) -> (7, 120). Если Петя первым своим ходом умножит количество камней во 2-й куче
в 2 раза, Ваня выиграет за 1 ход. Значение 30 подходит в качестве ответа. Ответ: 30
Готовая программа находится на следующем слайде.
16.
1: РЕШЕНИЕ 21-ГО ЗАДАНИЯ
SUMMA = 77 # сумма, необходимая для выигрыша
t = [ [0]*2*SUMMA for i in range(2*SUMMA) ]
for x in range(SUMMA-1, 0, -1):
for y in range(SUMMA-x-1, 0, -1):
PetyaHod = [ t[x+1][y], t[2*x][y], t[x][y+1], t[x][2*y] ] # возможные ходы из текущей позиции
PetyaWin = [V for V in PetyaHod if V <= 0]
if PetyaWin:
t[x][y] = -max(PetyaWin) + 1
else:
t[x][y] = -max(PetyaHod)
x = 7 # в первой куче 7 камней
for y in range(1, SUMMA-x, 1):
if t[x][y] == -2: # Ваня победил на втором ходе (изменения только здесь)
print(y)
17.
1: РЕШЕНИЕ 19-ГО ЗАДАНИЯ
Программа для 20 и 21 задания не совсем подходит для решения 19-го задания, т.к. в
ней Петя должен играть с ошибкой. Чтобы найти ответ, программу можно немного
изменить: оставить таблицу t с правильными решениями и добавить таблицу d для
вычисления результатов при неправильном ходе Пети.
SUMMA = 77
t = [ [0]*2*SUMMA for i in range(2*SUMMA) ] # таблица ОПТИМАЛЬНОЙ игры Пети
d = [ [0]*2*SUMMA for i in range(2*SUMMA) ] # таблица для игры Пети с ошибкой
18.
1: РЕШЕНИЕ 19-ГО ЗАДАНИЯ
После заполнения таблицы t добавляем кусок кода, который заполняет таблицу d. В таблице d
Ваня должен выигрывать за 1 ход, а Петя должен проигрывать за 1 ход:
# СТРОИМ ТАБЛИЦУ, В КОТОРОЙ ПЕТЯ ДОПУСКАЕТ ОШИБКУ И ПРОИГРЫВАЕТ ЗА 1 ХОД
for x in range(SUMMA-1, 0, -1):
for y in range(SUMMA-x-1, 0, -1):
PetyaHod = [ t[x+1][y], t[2*x][y], t[x][y+1], t[x][2*y] ]
PetyaLose = [V for V in PetyaHod if V == 1] # Ваня выигрывает за 1 ход
if PetyaLose:
d[x][y] = -1 # Петя проигрывает за 1 ход
Остальные варианты нас просто не интересуют, поэтому мы их не заполняем.
19.
1: РЕШЕНИЕ 19-ГО ЗАДАНИЯ
Результат выводим, естественно, для таблицы d:
# ВЫВОД ОТВЕТА
x = 7 # в первой куче 7 камней
for y in range(1, SUMMA-x, 1):
if d[x][y] == -1: # Ваня выигрывает за 1 ход после Петиной ошибки
print(y)
Вывод программы: числа 18, 19, 20, 21 … Минимальное число – 18. Ответ: 18
Готовая программа находится на следующем слайде.
20.
1: РЕШЕНИЕ 19-ГО ЗАДАНИЯ
SUMMA = 77
t = [ [0]*2*SUMMA for i in range(2*SUMMA) ] # таблица ОПТИМАЛЬНОЙ игры Пети
d = [ [0]*2*SUMMA for i in range(2*SUMMA) ] # таблица для игры Пети с ошибкой
# СТРОИМ ТАБЛИЦУ, В КОТОРОЙ ПЕТЯ НЕ ДОПУСКАЕТ ОШИБОК
for x in range(SUMMA-1, 0, -1):
# х — количество камней в первой куче
for y in range(SUMMA-x-1, 0, -1):
# y — количество камней во второй куче
PetyaHod = [ t[x+1][y], t[2*x][y], t[x][y+1], t[x][2*y] ] # возможные ходы из текущей позиции
PetyaWin = [c for c in PetyaHod if c <= 0]
if PetyaWin:
# если Петя может выиграть, он будет стараться выиграть
t[x][y] = -max(PetyaWin) + 1
else:
# если Петя проигрывает
t[x][y] = -max(PetyaHod)
# СТРОИМ ТАБЛИЦУ, В КОТОРОЙ ПЕТЯ ДОПУСКАЕТ ОШИБКУ И ПРОИГРЫВАЕТ ЗА 1 ХОД
for x in range(SUMMA-1, 0, -1):
# х — количество камней в первой куче
for y in range(SUMMA-x-1, 0, -1):
# y — количество камней во второй куче
PetyaHod = [ t[x+1][y], t[2*x][y], t[x][y+1], t[x][2*y] ] # возможные ходы из текущей позиции
PetyaLose = [V for V in PetyaHod if V == 1] # Ваня выигрывает за 1 ход
if PetyaLose:
# если Петя может проиграть Ване за 1 ход, он должен проиграть
d[x][y] = -1
# Петя проигрывает
# ВЫВОД ОТВЕТА
x = 7 # в первой куче 7 камней
for y in range(1, SUMMA-x, 1):
if d[x][y] == -1: # Ваня выигрывает за 1 ход после Петиной ошибки
print(y, d[x][y])
21.
1: О ПОСТРОЕНИИ ТАБЛИЦЫ t
Если Вы запускаете программу в IDLE, то t у Вас сохраняется после первого решения
(20-го задания) и перестраивать t не нужно. Тогда при решении 21-го и 19-го заданий
t можно не строить заново. Т.е. если Вы уже решили 20-е задание, для решения 21-го
достаточно запустить только код для вывода ответа:
x = 7 # в первой куче 7 камней
for y in range(1, SUMMA-x, 1):
if t[x][y] == -2: # Ваня победил на втором ходе (изменения только здесь)
print(y)
22.
1: О ПОСТРОЕНИИ ТАБЛИЦЫ t
Программа для решения 19-го задания при построенной таблице t:
d = [ [0]*2*SUMMA for i in range(2*SUMMA) ] # таблица для игры Пети с ошибкой
# СТРОИМ ТАБЛИЦУ, В КОТОРОЙ ПЕТЯ ДОПУСКАЕТ ОШИБКУ И ПРОИГРЫВАЕТ ЗА 1 ХОД
for x in range(SUMMA-1, 0, -1):
for y in range(SUMMA-x-1, 0, -1):
PetyaHod = [ t[x+1][y], t[2*x][y], t[x][y+1], t[x][2*y] ] # возможные ходы из текущей позиции
PetyaLose = [V for V in PetyaHod if V == 1]
if PetyaLose:
d[x][y] = -1
# ВЫВОД ОТВЕТА
x = 7 # в первой куче 7 камней
for y in range(1, SUMMA-x, 1):
if d[x][y] == -1: # Ваня
23.
1: ИТОГ
Даже если Вы не до конца понимаете отдельные участки кода (например, строчку
создания таблицы t), эти отдельные строчки всегда можно выучить. Смотрите сами,
что Вам проще: выучить наизусть несколько строчек кода (но написать их на экзамене
нужно будет без единой ошибки) или решить задачу математически.
Код программ для заданий 19-21 находится в курсе в файле «Пример 19-21.txt».
24.
ТИП 2: КОЛИЧЕСТВО
КАМНЕЙ В КУЧАХ
УМЕНЬШАЕТСЯ
25.
2: УСЛОВИЕ
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя.
За один ход игрок может убрать из одной из куч один камень или уменьшить количество камней в куче в два раза (если количество камней в
куче нечётно, остаётся на 1 камень больше, чем убирается). Игра завершается в тот момент, когда суммарное количество камней в кучах
становится не более 40. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет
40 или меньше камней. В начальный момент в первой куче было 20 камней, во второй куче — S камней, S > 20.
Задание 19.
Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите максимальное значение S, когда такая ситуация
возможна.
Задание 20.
Найдите три наименьших значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
— Петя не может выиграть за один ход;
— Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без разделительных знаков.
Задание 21
Найдите максимальное значение S, при котором одновременно выполняются два условия:
— у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
— у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
26.
2: ИЗМЕНЕНИЕ ПРОГРАММЫ ПОД 2-Й ТИП
Для того, чтобы рекурсивно заполнить таблицу при уменьшении количества камней в кучах, требуется:
1) определиться с максимальным размером таблицы (теперь мы сверху не ограничены)
2) понять, как запустить циклы в обратном порядке;
3) понять, как изменить формулы (в вычислении следующего хода).
Максимальный размер возьмём таким: SUMMA * 16. Такой размер таблицы позволяет вычислить игру
минимум в 4 хода.
SUMMA = 40
MAXS = 16*SUMMA
t = [ [0]*MAXS for i in range(MAXS) ]
Максимальный размер таблицы во всех задачах на уменьшение берём хотя бы 16*SUMMA.
27.
2: ИЗМЕНЕНИЕ ПРОГРАММЫ ПОД 2-Й ТИП
Запуск циклов в обратном порядке:
# СТРОИМ ТАБЛИЦУ ИГРЫ
for x in range(1, MAXS, 1):
for y in range(max(SUMMA-x+1, 1), MAXS, 1):
…..
# ВЫВОД ОТВЕТА
x = 20
for y in range(max(SUMMA-x+1, 1), MAXS, 1):
….
Если не очень понятно, почему нужно именно так запустить циклы, остаётся одно: зазубрить эти три
строчки кода.
28.
2: ИЗМЕНЕНИЕ ПРОГРАММЫ ПОД 2-Й ТИП
Теперь изменим формулы в PetyaHod.
Убрать камень из одной кучи легко:
PetyaHod = [ t[x-1][y], t[ ??? ][y], t[x][y-1], t[x][ ??? ] ]
Теперь уменьшим количество камней в куче в 2 раза, причём если камней – нечётное
количество, лишний камень заберём:
PetyaHod = [ t[x-1][y], t[ x//2 ][y], t[x][y-1], t[x][ y//2 ] ]
Но по условию ведь нам нельзя забирать лишний камень, он должен остаться в куче, поэтому:
PetyaHod = [ t[x-1][y], t[x//2 + x%2][y], t[x][y-1], t[x][y//2 + y%2] ]
29.
2: ИЗМЕНЕНИЕ ПРОГРАММЫ ПОД 2-Й ТИП
Всё. Больше никаких изменений нет.
Программы для решения заданий 20, 21 и 19 на следующих
слайдах.
30.
2: ВСЯ ПРОГРАММА (20-Е ЗАДАНИЕ)
SUMMA = 40 # минимальное количество камней
MAXS = 16*SUMMA # берём хотя бы 16
t = [ [0]*MAXS for i in range(MAXS) ]
# СТРОИМ ТАБЛИЦУ БЕЗОШИБОЧНОЙ ИГРЫ
for x in range(1, MAXS, 1):
for y in range(max(SUMMA-x+1, 1), MAXS, 1):
PetyaHod = [ t[x-1][y], t[x//2 + x%2][y], t[x][y-1], t[x][y//2 + y%2] ]
PetyaWin = [V for V in PetyaHod if V <= 0]
if PetyaWin:
t[x][y] = -max(PetyaWin) + 1
else:
t[x][y] = -max(PetyaHod)
# ВЫВОД ОТВЕТА ДЛЯ 20-ГО ЗАДАНИЯ
x = 20
for y in range(max(SUMMA-x+1, 1), MAXS, 1):
if t[x][y] == 2: # Петя выигрывает в 2 хода
print(y)
Программа выводит числа 42, 43, 61, 81, 82.
Вывод программы нужно перепроверить (что
Петя не может выиграть за 1 ход).
После перепроверки оказывается, что первые
три наименьших значения (42, 43, 61)
подходят.
Ответ: 42 43 61
31.
2: ВСЯ ПРОГРАММА (21-Е ЗАДАНИЕ)
SUMMA = 40 # минимальное количество камней
MAXS = 16*SUMMA # берём хотя бы 16
t = [ [0]*MAXS for i in range(MAXS) ]
# СТРОИМ ТАБЛИЦУ БЕЗОШИБОЧНОЙ ИГРЫ
for x in range(1, MAXS, 1):
for y in range(max(SUMMA-x+1, 1), MAXS, 1):
PetyaHod = [ t[x-1][y], t[x//2 + x%2][y], t[x][y-1], t[x][y//2 + y%2] ]
PetyaWin = [V for V in PetyaHod if V <= 0]
if PetyaWin:
t[x][y] = -max(PetyaWin) + 1
else:
t[x][y] = -max(PetyaHod)
# ВЫВОД ОТВЕТА ДЛЯ 21-ГО ЗАДАНИЯ
x = 20
for y in range(max(SUMMA-x+1, 1), MAXS, 1):
if t[x][y] == -2: # Ваня выигрывает в 2 хода
print(y)
Программа выводит единственное число — 44.
Ничего перепроверять не будем, всё равно
других вариантов нет.
Ответ: 44
32.
2: ВСЯ ПРОГРАММА (19-Е ЗАДАНИЕ)
SUMMA = 40 # минимальное количество камней
MAXS = 16*SUMMA # берём хотя бы 16
t = [ [0]*MAXS for i in range(MAXS) ]
# СТРОИМ ТАБЛИЦУ БЕЗОШИБОЧНОЙ ИГРЫ
for x in range(1, MAXS, 1):
for y in range(max(SUMMA-x+1, 1), MAXS, 1):
PetyaHod = [ t[x-1][y], t[x//2 + x%2][y], t[x][y-1], t[x][y//2 + y%2] ]
PetyaWin = [V for V in PetyaHod if V <= 0]
if PetyaWin:
t[x][y] = -max(PetyaWin) + 1
else:
t[x][y] = -max(PetyaHod)
# РЕШЕНИЕ 19-ГО ЗАДАНИЯ
d = [ [0]*MAXS for i in range(MAXS) ]
# СТРОИМ ТАБЛИЦУ, В КОТОРОЙ ПЕТЯ ДОПУСКАЕТ ОШИБКУ И ПРОИГРЫВАЕТ ЗА 1 ХОД
for x in range(1, MAXS, 1):
for y in range(max(SUMMA-x+1, 1), MAXS, 1):
PetyaHod = [ t[x-1][y], t[x//2 + x%2][y], t[x][y-1], t[x][y//2 + y%2] ]
PetyaLose = [V for V in PetyaHod if V == 1]
if PetyaLose:
d[x][y] = -1
# ВЫВОД ОТВЕТА ДЛЯ 19-ГО ЗАДАНИЯ
x = 20
for y in range(max(SUMMA-x+1, 1), MAXS, 1):
if d[x][y] == -1: # Ваня выигрывает за 1 ход после Петиной ошибки
print(y)
Программа выводит много чисел: 22, 23, 24 …
78, 79, 80. Максимальное — 80.
Ответ: 80