Программа курса:
Разбор задачи: Игра в делитель
Предложенный нами код решения:
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нечётное, то Алиса проигрывает, потому что она всегда будет начинать с нечётного числа и в конечном итоге окажется в ситуации, когда не сможет сделать ход.
- Если число
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии