Задача к ЕГЭ по информатике на тему «Теория игр» №8

Для игры, описанной в задании выше, найдите значение максимальное S, при котором у Пети есть выигрышная стратегия, позволяющая ему выиграть третьим ходом при любой игре Вани, но у Пети нет стратегии, которая позволяла бы ему гарантированно выиграть первым или вторым ходом.

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

from  functools import lru_cache
lru_cache(None)
def f(a,c=0,lastP1 = ’’,lastP2= ’’):# В данной программе нам понадобятся дополнительные параметры,а именно, параметр ’c’ - счётчик ходов, с помощью него будем определять чей сейчас ход. Если число ’c’ чётное,то сейчас ход Пети,иначе Вани.
    #Понадобятся также 2 параметра: lastP1 и lastP2. Они содержат в себе последний ход каждого из игрока.
    if a >= 68:return 0
    if c % 2 == 0 and lastP1 == ’’: #В свой первый ход Петя может сделать любой ход
        t = [f(a+3,c+1,’+3’,lastP2),f(a+6,c+1,’+6’,lastP2),f(a*3,c+1,’*3’,lastP2)]
    if c % 2 == 0 and lastP1 == ’+3’:
        t = [f(a+6,c+1,’+6’,lastP2),f(a*3,c+1,’*3’,lastP2)]
    if c % 2 == 0 and lastP1 == ’+6’:
        t = [f(a+3,c+1,’+3’,lastP2),f(a*3,c+1,’*3’,lastP2)]
    if c % 2 == 0 and lastP1 == ’*3’:
        t = [f(a+3,c+1,’+3’,lastP2),f(a+6,c+1,’+6’,lastP2)]
    if c % 2 != 0 and lastP2 == ’’: #В свой первый ход Ваня может сделать любой ход
        t = [f(a + 3, c + 1, lastP1, ’+3’), f(a + 6, c + 1, lastP1, ’+6’), f(a * 3, c + 1, lastP1, ’*3’)]
    if c % 2 != 0 and lastP2 == ’+3’:
        t = [f(a + 6, c + 1, lastP1, ’+6’), f(a * 3, c + 1, lastP1, ’*3’)]
    if c % 2 != 0 and lastP2 == ’+6’:
        t = [f(a + 3, c + 1, lastP1, ’+3’), f(a * 3, c + 1, lastP1, ’*3’)]
    if c % 2 != 0 and lastP2 == ’*3’:
        t = [f(a + 3, c + 1, lastP1, ’+3’), f(a + 6, c + 1, lastP1, ’+6’)]
    n = [i for i in t if i <= 0]
    if n:return -max(n) + 1
    return -max(t)
for i in range(1,69):
    if f(i) == 3:
        print(i)

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