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

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

—  до­ба­вить в кучу один ка­мень;

—  если ко­ли­че­ство кам­ней в куче чётно, до­ба­вить по­ло­ви­ну име­ю­ще­го­ся ко­ли­че­ства;

—  если ко­ли­че­ство кам­ней в куче крат­но трём, до­ба­вить треть име­ю­ще­го­ся ко­ли­че­ства;

—  если ко­ли­че­ство кам­ней в куче не крат­но ни двум, ни трём, удво­ить кучу.

На­при­мер, если в куче 5 кам­ней, то за один ход можно по­лу­чить 6 или 10 кам­ней, а если в куче 6 кам­ней, то за один ход можно по­лу­чить 7, или 8, или 9 кам­ней.

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

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

В на­ча­ле игры в куче было S кам­ней, 1 ≤ S ≤ 131.

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

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

Ре­ше­ние.

Такое зна­че­ние S  — 66. Своим пер­вым ходом Петя может по­лу­чить по­зи­ции 67, 99 (так как число де­лит­ся на 2) и 88 (так как число де­лит­ся на 3). В слу­чае по­зи­ции 67 Ваня удва­и­ва­ет ко­ли­че­ство кам­ней в куче и вы­иг­ры­ва­ет своим пер­вым ходом (так как 67 не де­лит­ся на 2 или 3). В слу­чае по­зи­ции 99 Ваня до­бав­ля­ет треть кам­ней в куче и вы­иг­ры­ва­ет своим пер­вым ходом (так как 99 де­лят­ся на 3). В слу­чае по­зи­ции 88 Ваня до­бав­ля­ет по­ло­ви­ну кам­ней в куче и вы­иг­ры­ва­ет своим пер­вым ходом (так как 88 де­лят­ся на 2).

 

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

def f(x, h):

if x >= 132:

return h % 2 == 0

if h == 0:

return 0

c = [f(x + 1, h - 1)]

if x % 2 == 0:

c += [f(x *3 // 2, h - 1)]

if x % 3 == 0:

c += [f(x *4 // 3, h - 1)]

if x % 2 != 0 and x % 3 != 0:

c += [f(x * 2, h - 1)]

return any (c) if h % 2 != 0 else all(c)

 

for x in range(1, 132):

if f(x, 2) == 1:

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

break

 

Ответ: 66.

 

При­ведём ре­ше­ние Ми­ха­и­ла Глин­ско­го на языке Python.

def f(x,n):

if n==2 and x>=132:

return 1

if n==2 and x<132:

return 0

if n==1 and x>=132:

return 0

else:

a=0

if x%2==0:

a=x//2

if x%3==0:

a=x//3

if x%2!=0 and x%3!=0 :

a=x

if n%2==0:

return f(x+1,n+1) and f(x+a,n+1)

if n%2==1:

return f(x+1,n+1) or f(x+a,n+1)

for s in range(1,132):

if f(s,0):

print(s)

break


Аналоги к заданию № 63035: 63068 Все

1
Тип 20 № 63069
i

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

В от­ве­те за­пи­ши­те най­ден­ные зна­че­ния в по­ряд­ке воз­рас­та­ния.

 

Ответ:


Аналоги к заданию № 63036: 63069 Все


2
Тип 21 № 63070
i

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


Аналоги к заданию № 63037: 63070 Все