Игроки ходят по очереди, первый ход делает Петя. Если в куче n камней и
Условие
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. Если в куче n камней и число n кратно k (k > 1), то за один ход разрешается добавить в кучу n/k камней.
Например, если в куче 12 камней, то за один ход можно добавить 1 (12/12), 2 (12/6), 3 (12/4), 4 (12/3) или 6 (12/2) камней.
Игра завершается, когда количество камней в куче становится больше 45.Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет больше 45 камней.В начале игры в куче было S камней, S ≤ 45.Укажите количество таких значений S, при которых Петя не может выиграть первым ходом, но при любом первом ходе Пети Ваня может выиграть своим первым ходом.
Ответ
Ответ и полный разбор откроются после входа
Посмотреть ответРешение по шагам
Как рассуждать
Решение. Приведём решение на языке Python. from functools import lru_cachedef f(n): cisla = [] for k in range(2, n + 1): if n % k == 0: cisla.append(n + n // k) return cisla@lru_cachedef game(n): if any(x > 45 for x in f(n)): return 'vic' if all (game(x)=='vic' for x in f(n)): return 'loss1' if any (game(x)=='loss1' for x in f(n)): return 'vic2' if all (game(x)=='vic' or game(x) == 'vic2' for x in f(n)): return 'loss2' z_19 = []z_20 = []z_21 = [] for n in range(2,46): if game(n) =='loss1': z_19.append(n) if game(n) =='vic2': z_20.append(n) if game(n) =='loss2': z_21.append(n) print(len(z_19))print(min(z_20), max(z_20))print(min(z_21))
Осталось ещё 4 шага
Приведём решение Льва Андреева на языке…
if f(s, 2)]))print(20, [s for s in range(1…
if (not f(s, 1)) and f(s, 3)])print(21, [s…
if ((f(s, 2)) or f(s, 4)) and (not f(s, 2))])…
Бесплатно · займёт минуту