Задания
Версия для печати и копирования в MS Word
Тип 19 № 70546
i

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

На­при­мер, из кучи в 20 кам­ней за один ход можно по­лу­чить кучу из 18, 15 или 6 кам­ней.

Игра за­вер­ша­ет­ся, когда ко­ли­че­ство кам­ней в куче ста­но­вит­ся не более 19.

По­бе­ди­те­лем счи­та­ет­ся игрок, сде­лав­ший по­след­ний ход, то есть пер­вым по­лу­чив­ший кучу, в ко­то­рой будет 19 или мень­ше кам­ней. В на­чаль­ный мо­мент в куче было S кам­ней, S ≥ 20.

Будем го­во­рить, что игрок имеет вы­иг­рыш­ную стра­те­гию, если он может вы­иг­рать при любых ходах про­тив­ни­ка.

Ука­жи­те ми­ни­маль­ное зна­че­ние S, при ко­то­ром Петя не может вы­иг­рать за один ход, но при любом ходе Пети Ваня может вы­иг­рать своим пер­вым ходом.

Спрятать решение

Ре­ше­ние.

Ми­ни­маль­ное зна­че­ние: S  =  60. Петя может по­лу­чить по­зи­ции 58, 55 или 20, в ко­то­рых Ваня может вы­иг­рать умень­шив ко­ли­че­ство кам­ней в куче в три раза. При мень­ших зна­че­ни­ях S вы­иг­ры­ва­ет Петя пер­вым ходом.

 

Ответ: 60.

 

При­ведём дру­гое ре­ше­ние на языке Python.

def f(x, h):

if h == 3 and x <= 19:

return 1

elif h == 3 and x > 19:

return 0

elif x <= 19:

return 0

else:

if h % 2 == 0:

return f(x - 2, h + 1) or f(x - 5, h + 1) or f(x // 3, h + 1) # стра­те­гия по­бе­ди­те­ля

else:

return f(x - 2, h + 1) and f(x - 5, h + 1) and f(x // 3, h + 1) # стра­те­гия про­иг­рав­ше­го(не­удач­ный ход)

for x in range(20, 100):

if f(x, 1) == 1:

print(x)

break

Источник: Де­мон­стра­ци­он­ная вер­сия ЕГЭ−2025 по ин­фор­ма­ти­ке