
Задача по теме: "Теория игр (Задания 19)"
68. Теория игр Одна куча
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или четыре камня либо увеличить количество камней в куче в три раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 223.
Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 223 или более камней.
В начальный момент в куче было S камней; 1 <= S <= 222.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите такое значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
Решение:
Решим задание через Excel:
Построим таблицу всевозможных ходов Пети и Вани и настроим условное форматирование для наглядности. Нам нужно, чтобы Петя своим ходом не выиграл, а Ваня выиграл. То есть при любом ходе Пети у него должно быть камней меньше, чем необходимо для победы. А Ваня будет выигрывать своим сильным ходом.
Подробное решение представлено в файле.
Решим задачу с помощью программы на языке программирования Python:
def game(s, m):
if s >= 223: return m%2==0
if m == 0: return 0
steps = [game(s+4,m-1), game(s+1,m-1), game(s*3,m-1)]
return any(steps) if m%2!=0 else all(steps)
print('19 задача:', [x for x in range(1,223) if not game(x,0) and game(x,2)])
Данный код решает задачу, используя рекурсивную функцию game(), которая проверяет различные комбинации ходов в игре. Функция game() принимает текущий счет игры s и количество оставшихся ходов m. Если текущий счет s больше или равен 223, функция возвращает True, если m является четным числом, иначе возвращает False. Если количество оставшихся ходов m равно 0, функция возвращает 0. В остальных случаях функция рекурсивно вызывает себя для трех возможных ходов и уменьшает количество оставшихся ходов на 1. Затем функция возвращает True, если хотя бы один из ходов возвращает True (если m нечетное) или если все ходы возвращают True (если m четное).
Ответ: 74
Сообщение об ошибке
Расскажите, в каком месте допущена ошибка, мы как можно быстрее её исправим. Спасибо за обратную связь!
| МГ | Pro | ProMax | |
| Практика на платформе | |||
| Отслеживание прогресса обучения | |||
| Двухуровневое домашнее задание после каждого вебинара | |||
| Все материалы составлены экспертом ЕГЭ | |||
| Персональный менеджер | |||
| Личный куратор | |||
| Разбор ошибок личным куратором | |||
| Еженедельные созвоны с куратором для закрытия индивидуальных пробелов | |||
| Составление индивидуального расписания |
счёта
средств
подтверждено!
Теперь вы можете приступить
к следующему уроку
курса по математике
замены
Для смены номера телефона
мы отправили Вам код по СМС,
введите его в поле ниже.
Электронная почта
На почту придет чек об оплатеНажимая кнопку "купить", Вы выражаете своё согласие с офертой оказания услуг и принимаете их условия
Здравствуйте!
Выберите информацию о себе ниже
Оплата прошла успешно!