Для игры, описанной
Такое значение S — 56. Своим первым ходом Петя может получить позиции 57 или 84 (так как число делится
Приведём решение на языке Python.
def f(x, h):
if x >= 96:
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(96,1,-1):
if f(x, 4) == 1 and f(x, 2) == 0:
print("Задача 21: ", x)
break
Решим задание с помощью электронных таблиц.
Скопируем решение задачи 19 шестнадцать раз начиная
В ячейку M3 — ход =L3+1.
В ячейку M67 — ход =ЕСЛИ(ОСТАТ(L3;2)=0;L3+L3*0,5;-1000).
В ячейку M131 — ход =ЕСЛИ(ОСТАТ(L3;3)=0;L3+L3*1/3;-1000).
В ячейку M195 — ход =ЕСЛИ(И(ОСТАТ(L3;2)<>0;ОСТАТ(L3;3)<>0);L3*2;-1000).
Меняя значение
Получим следующую таблицу и подходящее значение 56: решение.xlsx.
Ответ: 56.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. В игре разрешено делать следующие ходы:
— добавить в кучу один камень;
— если количество камней в куче чётно, добавить половину имеющегося количества;
— если количество камней в куче кратно трём, добавить треть имеющегося количества;
— если количество камней в куче не кратно ни двум, ни трём, удвоить кучу.
Например, если в куче
Игра завершается, когда количество камней в куче
Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой
В начале игры в куче было S камней, 1 ≤ S ≤ 95.
Укажите минимальное
Такое значение S — 48. Своим первым ходом Петя может получить
Приведём решение на языке Python.
def f(x, h):
if x >= 96:
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, 96):
if f(x, 2) == 1:
print("Задача 19: ", x)
break
Решим задание с помощью электронных таблиц.
В ячейку B1 введем максимальное значение камней в куче 95.
Для Пети пропишем следующие ходы:
В ячейку D3 — ход =C3+1;
В ячейку D7 — ход =ЕСЛИ(ОСТАТ(C3;2)=0;C3+C3*0,5;-1000);
В ячейку D11 — ход =ЕСЛИ(ОСТАТ(C3;3)=0;C3+C3*1/3;-1000);
В ячейку D15 — ход =ЕСЛИ(И(ОСТАТ(C3;2)<>0;ОСТАТ(C3;3)<>0);C3*2;-1000).
Для Вани пропишем ходы аналогично, соответственно ходам Пети.
Меняя значение
Получим следующую таблицу и подходящее
Файл с решением: Решение.xlsx
Ответ: 48.
Для игры, описанной
В ответе запишите найденные значения в порядке возрастания.
Ответ:
Первое такое значение S — 57. Своим первым ходом Петя может получить позиции
Второе такое значение S — 62. Своим первым ходом Петя может получить
Приведём решение на языке Python.
def f(x, h):
if x >= 96:
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)
count = 0
for x in range(96, 1, -1):
if f(x, 3) == 1 and f(x,1) == 0:
count += 1
print("Задача 20: ", x)
if count == 2:
break
Приведём решение Сергея Гусарова на языке Python.
def f(s,p,k):
if p > k:
return False
if s >= 96 and p%2 == 0:
return False
if s >= 96 and p%2 == 1:
return True
if s < 96 and p%2 == 1:
if s%6 == 0:
return f(s + s//2, p+1,k) and f(s + s//3,p+1,k) and f(s+1,p+1,k)
elif s%2 == 0:
return f(s + s//2, p+1,k) and f(s+1,p+1,k)
elif s%3 == 0:
return f(s + s//3,p+1,k) and f(s+1,p+1,k)
else:
return f(s*2, p+1,k) and f(s+1,p+1,k)
if s < 96 and p%2 == 0:
if s%6 == 0:
return f(s + s//2, p+1,k) or f(s + s//3,p+1,k) or f(s+1,p+1,k)
elif s%2 == 0:
return f(s + s//2, p+1,k) or f(s+1,p+1,k)
elif s%3 == 0:
return f(s + s//3,p+1,k) or f(s+1,p+1,k)
else:
return f(s*2, p+1,k) or f(s+1,p+1,k)
d = []
d2 = []
for s in range(1,95):
if f(s,0,1):
d.append(s)
for s in range(1,95):
if f(s,0,3) and s not in d:
d2.append(s)
print(*d2[-2:])
Решим задание с помощью электронных таблиц.
Скопируем решение
В ячейку H3 — ход =G3+1.
В ячейку H19 — ход =ЕСЛИ(ОСТАТ(G3;2)=0;G3+G3*0,5;-1000).
В ячейку H35 — ход =ЕСЛИ(ОСТАТ(G3;3)=0;G3+G3*1/3;-1000).
В ячейку H15 — ход =ЕСЛИ(И(ОСТАТ(G3;2)<>0;ОСТАТ(G3;3)<>0);G3*2;-1000).
Меняя значение
Получим следующую таблицу и подходящие значения 57&62.
Ответ: 57&62.
Для игры, описанной
Такое значение S — 80. Своим первым ходом Петя может получить позиции
Приведём решение на языке 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(132,1,-1):
if f(x, 4) == 1 and f(x, 2) == 0:
print("Задача 21: ", x)
break
Ответ: 80.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. В игре разрешено делать следующие ходы:
— добавить в кучу один камень;
— если количество камней в куче чётно, добавить половину имеющегося количества;
— если количество камней в куче кратно трём, добавить треть имеющегося количества;
— если количество камней в куче не кратно ни двум, ни трём, удвоить кучу.
Например, если в куче
Игра завершается, когда количество камней в куче
Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой
В начале игры в куче было
Укажите минимальное
Такое значение S — 66. Своим первым ходом Петя может получить
Приведём решение на языке 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
Для игры, описанной
В ответе запишите найденные значения в порядке возрастания.
Ответ:
Первое такое значение S — 81. Своим первым ходом Петя может получить
Второе такое значение S — 86. Своим первым ходом Петя может получить
Приведём решение на языке 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)
count = 0
for x in range(132, 1, -1):
if f(x, 3) == 1 and f(x,1) == 0:
count += 1
print("Задача 20: ", x)
if count == 2:
break
Ответ: 81 86.
Наверх

