Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/120: Рейтинг темы: голосов - 120, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 11.01.2022
Сообщений: 1

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит три кучи камней

11.01.2022, 20:37. Показов 25876. Ответов 2

Студворк — интернет-сервис помощи студентам
Решая задачи 19-21 егэ впервые встретил условие с 3 кучами, которое ввело меня в ступор. Условие:
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч 3, 13 или 23 камня. Игра завершается в тот момент, когда в сумме в кучах будет не менее 73 камней. Победителем считается игрок, сделавший последний ход. В начальный момент в кучах было (2, S, 2S) камней, 1 ≤ S ≤ 23.
1)Найдите минимальное и максимальное значения S, при которых Петя выигрывает вторым ходом при любом ходе Вани.
2)Найдите два значения S, при которых выигрышная стратегия есть у Вани, но Петя может выбрать, каким ходом выиграет Ваня – первым или вторым.
Попробовав, как обычно, поменять условие, у меня ничего не вышло. Правильные ответы: 1) 8 14
2) 10 13
Надеюсь поможете разобраться, что я сделал не так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
k1,k2,k3 = 3,13,23
n,t=2,73
def gameover(n1,n2,n3):
    return n1+n2+n3>=t
def win(n1,n2,n3,bymove):
    if gameover(n1,n2,n3):
        return False
    return lose(n1+k1,n2,n3,bymove-1) or\
           lose(n1+k2,n2,n3,bymove-1) or\
           lose(n1+k3,n2,n3,bymove-1) or\
           lose(n1,n2+k1,n3,bymove-1) or\
           lose(n1,n2+k2,n3,bymove-1) or\
           lose(n1,n2+k3,n3,bymove-1) or\
           lose(n1,n2,n3+k1,bymove-1) or\
           lose(n1,n2,n3+k2,bymove-1) or\
           lose(n1,n2,n3+k3,bymove-1)
def lose(n1,n2,n3,bymove):
    if gameover:
        return True
    if bymove == 0:
        return False
    return win(n1+k1,n2,n3,bymove) and\
           win(n1+k2,n2,n3,bymove) and\
           win(n1+k3,n2,n3,bymove) and\
           win(n1,n2+k1,n3,bymove) and\
           win(n1,n2+k2,n3,bymove) and\
           win(n1,n2+k3,n3,bymove) and\
           win(n1,n2,n3+k1,bymove) and\
           win(n1,n2,n3+k2,bymove) and\
           win(n1,n2,n3+k3,bymove)
ans2,ans3=[],[]
for s in range(1,24):
    if win(n,s,2*s,2) :
        ans2.append(s)
    if lose(n,s,2*s,2) or lose(n,s,2*s,1):
        ans3.append(s)
print(ans2,ans3)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2022, 20:37
Ответы с готовыми решениями:

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

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней
Помогите решить Задачи 19 - 21. Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по...

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

2
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
14.01.2022, 12:58
«2) Найдите два значения S, при которых выигрышная стратегия есть у Вани, но Петя может выбрать, каким ходом выиграет Ваня – первым или вторым.»

Это задание сформулировано некорректно. На самом деле выигрышная стратегия у Вани есть только при S = 7 (гарантированно выигрывает на своем втором ходу при любых ходах Пети) и при S = 15 (гарантированно выигрывает на своем первом ходу при любых ходах Пети). При всех остальных значениях S выигрышная стратегия есть только у Пети. Поэтому здесь он может только намеренно проиграть. А намеренно проиграть, имея возможность выбрать, сделать это на первом или на втором ходу Вани, он может при значениях S от 9 до 20.

Мое решение:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
n_finish = 73
S_min = 1
S_max = 23
move_vals = [3, 13, 23]
move_val_min = move_vals[0] # 3
move_val_max = move_vals[-1] # 23
move_val_min_max = move_val_min + move_val_max # 26
#==============================================================================
def Petya_purposely_loses_on_move( k, S ):
    n = S*3 + 2
    rem = n_finish - n
    return move_val_min * (k-1) < rem <= move_val_max * k
#==============================================================================
def Petya_purposely_loses_on_second_and_fourth_move(S):
    return Petya_purposely_loses_on_move(2, S) \
           and Petya_purposely_loses_on_move(4, S)
#==============================================================================
def Petya_is_guaranteed_win_on_second_move(S):
    n = S*3 + 2
    rem = n_finish - n
    rem -= move_val_min_max
    return 0 < rem <= move_val_max
#==============================================================================
S_values = [ x for x in range( S_min, S_max + 1 ) ]
S_P_g_win = list(filter(Petya_is_guaranteed_win_on_second_move, S_values))
print( 'Значения S, при которых Петя выигрывает вторым ходом при любом ходе Вани:' )
print(S_P_g_win)
print()
S_P_loses_2_4 = list(filter(Petya_purposely_loses_on_second_and_fourth_move, S_values))
print( 'Значения S, при которых Петя может намеренно проиграть Ване, при этом выбрав,' )
print( 'сделать это на втором или четвертом ходу:' )
print( S_P_loses_2_4 )
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
14.01.2022, 23:44
Пардон, в предыдущее сообщение вкрались ошибки. Петя может намеренно проиграть Ване на втором или четвертом ходу игры или, соответственно, на первом или втором ходу Вани при значениях S от 9 до 13.
Вот исправленный код программы:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
n_finish = 73
S_min = 1
S_max = 23
move_vals = [3, 13, 23]
move_val_min = move_vals[0] # 3
move_val_max = move_vals[-1] # 23
move_val_min_max = move_val_min + move_val_max # 26
#==============================================================================
def Petya_purposely_loses_on_2_move(S):
    n = S*3 + 2
    rem = n_finish - n
    return move_val_min + 1  <= rem <= move_val_max * 2
#==============================================================================
def Petya_purposely_loses_on_4_move(S):
    n = S*3 + 2
    rem = n_finish - n
    return move_val_max + move_val_min*2 + 1  <= rem <= move_val_max * 4
#==============================================================================
def Petya_purposely_loses_on_2_and_4_move(S):
    return Petya_purposely_loses_on_2_move(S) \
           and Petya_purposely_loses_on_4_move(S)
#==============================================================================
def Petya_is_guaranteed_win_on_second_move(S):
    n = S*3 + 2
    rem = n_finish - n
    rem -= move_val_min_max
    return 0 < rem <= move_val_max
#==============================================================================
S_values = [ x for x in range( S_min, S_max + 1 ) ]
S_P_g_win = list(filter(Petya_is_guaranteed_win_on_second_move, S_values))
print( 'Значения S, при которых Петя выигрывает вторым ходом при любом ходе Вани:' )
print(S_P_g_win)
print()
S_P_loses_2_4 = list(filter(Petya_purposely_loses_on_2_and_4_move, S_values))
print( 'Значения S, при которых Петя может намеренно проиграть Ване, при этом выбрав,' )
print( 'сделать это на втором или четвертом ходу:' )
print( S_P_loses_2_4 )
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.01.2022, 23:44
Помогаю со студенческими работами здесь

Стратегия при игре "Куча камней"
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За...

Два игрока, Петя и Ваня, играют в следующую игру
(№ 4825) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает...

Есть кучка из n камней. Два игрока играют в игру. Первый игрок на своем ходу может взять либо a1, либо a2, ., либо ak
Есть кучка из n камней. Два игрока играют в игру. Первый игрок на своем ходу может взять либо a1, либо a2, ..., либо ak камней. Второй...

Игроки А и В играют в следующую игру
Помогите пожалуйста, никак не могу решать. Игроки А и В играют в следующую игру. Игрок А делает ставку 10 грн, а игрок В - 7 грн. Из...

Три человека играют в игру, в которой один выигрывает, а два других проигрывают. Каждый проигравший дает выигравшему сумму, равную количеству денег
Три человека играют в игру, в которой один выигрывает, а два других проигрывают. Каждый проигравший дает выигравшему сумму, равную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru