Разбор задачи: Игра в делитель

Предложенный нами код решения:

 def divisorGame(n):
    """
    Определяет, выиграет ли Алиса игру, если оба игрока играют оптимально.
    :param n: начальное число на доске
    :return: True, если Алиса выигрывает, иначе False
    """
    # Если n чётное, Алиса выигрывает. Если нечётное, проигрывает.
    return n % 2 == 0
  • Механизм хода игры:
    • На каждом ходу игрок выбирает число x, которое является делителем текущего числа n, где 0 < x < n и n % x == 0.
    • После выбора числа x, текущий игрок вычитает его из n, то есть меняет значение числа на n - x.
  • Как Алиса может выиграть?:
    • Если число n чётное, то на первом ходу Алиса всегда может выбрать такой делитель, который оставит чётное число для Боба. После этого Боб, в свою очередь, всегда будет вынужден оставить нечётное число для Алисы, пока не дойдёт до единицы. Это значит, что Алиса может продолжать играть до тех пор, пока не победит.
    • Если же n нечётное, Алиса всегда будет начинать ход с нечётного числа, и Боб в свою очередь будет всегда оставлять чётное число для Алисы. Это будет продолжаться до тех пор, пока Алиса не столкнётся с невозможностью сделать ход и не проиграет.
  • Итак, решение задачи сводится к проверке чётности числа:
    • Если число n чётное, то Алиса может выиграть, потому что она может оставить Бобу нечётное число.
    • Если число n нечётное, то Алиса проигрывает, потому что она всегда будет начинать с нечётного числа и в конечном итоге окажется в ситуации, когда не сможет сделать ход.

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии