Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. В игре разрешено делать следующие ходы:
— убрать из кучи один камень;
— если количество камней в куче чётно, убрать половину имеющегося количества;
— если количество камней в куче кратно трём, убрать треть имеющегося количества.
Например, если в куче
Игра завершается, когда количество камней в куче становится
Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет меньше 10 камней.
В начале игры в куче было
Укажите максимальное
Такое значение S — 19. Своим первым ходом Петя может получить
Приведём решение на языке Python.
def f(x,k,v):
if x<10:
return k in v
if k >= max(v):
return 0
h = [f(x-1,k+1,v)]
if x % 2 ==0:
h.append(f(x//2,k+1,v))
if x % 3 ==0:
h.append(f(x - x//3,k+1,v))
if k%2 != max(v) % 2:
return any(h)
else:
return all(h)
for x in range (10000,10+1,-1):
if f(x,0,[2]) == 1:
print('Задача 19:',x)
break
Ответ: 19.
Приведём решение Нахметова Сархана на языке Python.
def game(pile, mov):
if mov == 3 and pile < 10:
return 1
elif mov == 3 and pile >= 10:
return 0
elif mov < 3 and pile < 10:
return 0
else:
if mov % 2 == 0:
if pile % 2 == 0 and pile % 3 == 0:
return game(pile - 1, mov + 1) or game(pile / 2, mov + 1) or game(pile * (2 / 3), mov + 1)
elif pile % 2 == 0:
return game(pile - 1, mov + 1) or game(pile / 2, mov + 1)
elif pile % 3 == 0:
return game(pile - 1, mov + 1) or game(pile * (2 / 3), mov + 1)
else:
return game(pile - 1, mov + 1)
else:
if pile % 2 == 0 and pile % 3 == 0:
return game(pile - 1, mov + 1) and game(pile / 2, mov + 1) and game(pile * (2 / 3), mov + 1)
elif pile % 2 == 0:
return game(pile - 1, mov + 1) and game(pile / 2, mov + 1)
elif pile % 3 == 0:
return game(pile - 1, mov + 1) and game(pile * (2 / 3), mov + 1)
else:
return game(pile - 1, mov + 1)
k = 0
for pile in range(100, 9, -1):
if game(pile, 1) == 1:
print(pile)
break
for j in range (0,len(a)):
if a[j]%2==0:
suma2+=a[j]
k2+=1
else:
suma1+=a[j]
k1+=1
if k2>k1 and suma2 print(k)

