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

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

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

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

В на­чаль­ный мо­мент в куче было S кам­ней; 1 ≤ S ≤ 77.

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

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

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

Ре­ше­ние.

Такое зна­че­ние S  — 19. Своим пер­вым ходом Петя может по­лу­чить по­зи­ции 20, 23 и 76. Во всех слу­ча­ях Ваня уве­ли­чи­ва­ет ко­ли­че­ство кам­ней в куче в че­ты­ре раза и вы­иг­ры­ва­ет своим пер­вым ходом.

 

Ответ: 19.

 

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

 

Для кон­тро­ля ходов иг­ро­ков заведём пе­ре­мен­ную m.

Если m  =  1, то это дей­ствие x + 1.

Если m  =  2, то это дей­ствие x + 4.

Если m  =  3, то это дей­ствие x · 4.

Таким об­ра­зом, можно ис­клю­чать ходы, ко­то­рые уже были сде­ла­ны, не вклю­чая их в воз­вра­ща­е­мые зна­че­ния функ­ции.

 

def f(x, h, m):

if h == 3 and x >= 78:

return 1

elif h == 3 and x < 78:

return 0

elif x >= 78 and h < 3:

return 0

else:

if h % 2 == 0:

if h == 2:

if m == 1:

return f(x + 1, h + 1, m) or f(x * 4, h + 1, m)

elif m == 2:

return f(x + 4, h + 1, m) or f(x * 4, h + 1, m)

elif m == 3:

return f(x + 1, h + 1, m) or f(x + 4, h + 1, m)

else:

return f(x + 1, h + 1, 1) and f(x + 4, h + 1, 2) and f(x * 4, h + 1, 3)

for x in range(1, 78):

if f(x, 1, 0) == 1:

print("За­да­ча 19:", x)

break

 

При­ведём ре­ше­ние Ев­ге­ния Дж­об­са (ана­ли­ти­че­ское).

Изоб­ра­зим игру схе­ма­ти­че­ски:

Спер­ва опре­де­лим все зна­че­ния S, при ко­то­рых хо­дя­щий из них игрок может вы­иг­рать пер­вым ходом (одним или не­сколь­ки­ми из до­пу­сти­мых ходов). Тогда:

 со­во­куп­ность вы­ра­же­ний \text ход плюс 1: S=77, \text ход плюс 4: 74 мень­ше или равно S мень­ше или равно 77, \text ход умно­жить на 4: 20 мень­ше или равно S мень­ше или равно 77. конец со­во­куп­но­сти .

Сле­до­ва­тель­но, при зна­че­ни­ях S, при­над­ле­жа­щих диа­па­зо­ну [20; 77], игрок, де­ла­ю­щий ход из них одер­жи­ва­ет по­бе­ду своим пер­вым ходом (вы­иг­рыш­ные по­зи­ции для игры дли­ной в один ход).

Чтобы найти вы­иг­рыш­ные по­зи­ции для игры дли­ной в два хода (во­прос за­да­чи), не­об­хо­ди­мо, чтобы после пер­во­го хода сле­ду­ю­щий игрок ходил из вы­иг­рыш­ной по­зи­ции для игры дли­ной в один ход.

 си­сте­ма вы­ра­же­ний 20 мень­ше или равно S плюс 1 мень­ше или равно 77, 20 мень­ше или равно S плюс 4 мень­ше или равно 77, 20 мень­ше или равно 4 S мень­ше или равно 77, S \notin левая квад­рат­ная скоб­ка 20; 77 пра­вая квад­рат­ная скоб­ка конец си­сте­мы рав­но­силь­но си­сте­ма вы­ра­же­ний 19 мень­ше или равно S мень­ше или равно 76, 16 мень­ше или равно S мень­ше или равно 73, 5 мень­ше или равно S мень­ше или равно 19, S \notin левая квад­рат­ная скоб­ка 20; 77 пра­вая квад­рат­ная скоб­ка конец си­сте­мы . рав­но­силь­но S=19.

 

При­ведём ре­ше­ние Ев­ге­ния Дж­об­са (элек­трон­ные таб­ли­цы, фор­му­ла).

Вста­вим в стол­бец А с ячей­ки A1 числа ариф­ме­ти­че­ской про­грес­сии от 1 до 78 с шагом 1.

В ячей­ке В1 за­пи­шем фор­му­лу для по­бе­ды пер­вым ходом В1:

=ЕСЛИ(ИЛИ(А1+1>79;A1+4>79;A1*4>79);1;0).

В ячей­ке C1 за­пи­шем фор­му­лу для по­бе­ды вто­рым ходом:

B1 =ЕСЛИ(ИЛИ(A1+1>79;A1+4>79;A1*4>79);1;0).

Усло­вие B1  =  1 га­ран­ти­ру­ет, что про­ве­ря­е­мое зна­че­ние не удо­вле­тво­ря­ло игре в один ход. ИН­ДЕКС(В:В;А1*4) воз­вра­ща­ет зна­че­ние для 4S в столб­це В. Также для удоб­ства по­ис­ка най­ден­ных зна­че­ний на­ло­жим на диа­па­зон B:Е услов­ное фор­ма­ти­ро­ва­ние для зна­че­ний не­рав­ных 0.

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

def move(n,lim,s):

# n - номер хода, lim - огра­ни­че­ние на число ходов, s - число кам­ней

# Ре­зуль­тат: 1 - вы­иг­рал пер­вый игрок, 2 - вто­рой, 0 - по­бе­ди­те­ля нет

player = 2 - n%2# Те­ку­щий игрок

rival = 3 - player# Про­тив­ник

if s >= 78:# Игра уже окон­че­на

return rival # Вы­иг­рал сде­лав­ший преды­ду­щий ход

if n > lim:# Пре­вы­шен лимит ходов

return 0# По­бе­ди­тель не опре­де­лен

pos = [s+1, s+4, s*4]# По­зи­ции после хода иг­ро­ка

res = [move(n+1, lim, x) for x in pos]# Ре­зуль­та­ты ходов

if any([x == player for x in res]):# Есть вы­иг­рыш­ный ход

return player

if all([x == rival for x in res]):# Все ходы про­иг­рыш­ные

return rival

return 0# По­бе­ди­тель не опре­де­лен

 

print('#19:',*[s for s in range(1,78) if move(1,2,s)==2])

print('#20:',*[s for s in range(1,78) if move(1,1,s)==0 and move(1,3,s)==1])

print('#21:',*[s for s in range(1,78) if move(1,2,s)==0 and move(1,4,s)==2])

Источник: ЕГЭ по ин­фор­ма­ти­ке 06.04.2023. До­сроч­ная волна
1
Тип 20 № 55816
i

Для игры, опи­сан­ной в за­да­нии 19, най­ди­те два ми­ни­маль­ных зна­че­ния S, при ко­то­рых у Пети есть вы­иг­рыш­ная стра­те­гия вто­рым ходом, при этом он не может га­ран­ти­ро­ва­но вы­иг­рать за один ход.

 

Ответ:


2
Тип 21 № 55817
i

Для игры, опи­сан­ной в за­да­нии 19, най­ди­те ми­ни­маль­ное зна­че­ние S, при ко­то­ром од­но­вре­мен­но вы­пол­ня­ют­ся два усло­вия:

—  у Вани есть вы­иг­рыш­ная стра­те­гия, поз­во­ля­ю­щая ему вы­иг­рать пер­вым или вто­рым ходом при любой игре Пети;

—  у Вани нет стра­те­гии, ко­то­рая поз­во­лит ему га­ран­ти­ро­ван­но вы­иг­рать пер­вым ходом.