На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Сообщение: 8
ссылка на сообщение  Отправлено: 22.12.21 15:01. Заголовок: Тренировочная работа от 17/12/21


Добрый день! Прошу помощи, как это запрограммировать? Решил задачу только в excel, и то есть сомнения.

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит
куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень, добавить два камня или увеличить количество камней в куче в два раза. При этом нельзя повторять ход, который только что сделал второй игрок.
Например, если в начале игры в куче 3 камня, Петя может первым ходом получить кучу из 4, 5 или 6 камней. Если Петя получил кучу из 5 камней (добавил 2 камня), то следующим ходом Ваня может получить 6 или 10 камней. Получить 7 камней Ваня не может, так как для этого нужно добавить 2 камня, а такой ход только что сделал Петя.
Чтобы делать ходы, у каждого игрока есть неограниченное количество камней.
Игра завершается, когда количество камней в куче становится не менее 34. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 34 или больше камней.
В начальный момент в куче было S камней, 1 ≤ S ≤ 33.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите такое значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 3 [только новые]


Администратор




Сообщение: 3121
ссылка на сообщение  Отправлено: 22.12.21 21:51. Заголовок: konyashkind пишет: ..


konyashkind пишет:
 цитата:
как это запрограммировать?

Например, так:
 TARGET = 34 
KADD1, KADD2, KMUL = 1, 2, 2

def gameOver( n1 ):
return n1 >= TARGET

def nextVariants( x, previousMove ):
nextCodes = [(gameResult( x+KADD1, 1 ), 1),
(gameResult( x+KADD2, 2 ), 2),
(gameResult( x*KMUL, 3 ), 3) ]
return [ code for code in nextCodes
if code[1] != previousMove ]

results = {}
def gameResult( x, previousMove = -1 ):
print( x, previousMove )
if (x, previousMove) in results:
return results[(x, previousMove)]
if gameOver(x): return 0
nextCodes = nextVariants( x, previousMove )
negative = [c for c in nextCodes if c[0] <= 0]
if negative:
move = max( negative, key = lambda x: x[0] )
res = - move[0] + 1
else:
move = max( nextCodes, key = lambda x: x[0] )
res = - move[0]
results[(x, previousMove)] = res
return res

from math import ceil
ans1 = ceil( TARGET/KMUL - 1 )
ans2 = []
ans3 = []
for S in range(TARGET-1,0,-1):
r = gameResult( S )
print( "%d: %d" % (S, r) )
if r == 2: ans2.append(S)
if r == -2: ans3.append(S)

#-------------------------------------------------------
# Ответы на вопросы
#-------------------------------------------------------
print("--- Ответы на вопросы ---")
print("1. ", ans1)
print("2. ", sorted(ans2))
print("3. ", sorted(ans3))


___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 9
ссылка на сообщение  Отправлено: 23.12.21 10:24. Заголовок: Огромное спасибо!..


Огромное спасибо!

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 3
ссылка на сообщение  Отправлено: 20.02.22 19:05. Заголовок: Извините, забыл тег вставить. Повторно высылаю программу.


def f(x,p): 
if x>=100 and p==4:
return True
else:
if x<100 and p==4:
return False
else:
if x>=100:
return False
if p%2==0:
return f(x+1,p+1)
else:
return f(x+3,p+1) or f(x*3,p+1)
if p%2==0:
return f(x+3,p+1)
else:
return f(x*3,p+1)or f(x+1,p+1)
if p%2==0:
return f(x*3,p+1)
else:
return f(x+3,p+1) or f(x+1,p+1)

for s in range(1,99):
if f(s,1):
print(s)
print('====================================')
def f(x,p):
if x>=100 and p==2:
return True
else:
if x<100 and p==2:
return False
else:
if x>=100:
return False
if p%2==0:
return f(x+1,p+1)
else:
return f(x+3,p+1) or f(x*3,p+1)
if p%2==0:
return f(x+3,p+1)
else:
return f(x*3,p+1)or f(x+1,p+1)
if p%2==0:
return f(x*3,p+1)
else:
return f(x+3,p+1) or f(x+1,p+1)

for s in range(1,99):
if f(s,1):
print(s)


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 4163
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет