Игра ним для двух игроков с одной кучей и ограничением на количество забираемых камней: за один ход
можно взять не больше трёх камней. Напишите программу с «искусственным интеллектом» (ИИ), которая играет против пользователя и выигрывает, если может. Исходное количество камней в куче задаёт пользователь, программа всегда ходит первой. После каждого хода пользователя и программы необходимо сообщать, сколько камней взято и сколько осталось. В конце необходимо сообщить, кто выиграл. Пользователь в свой ход вводит количество камней до тех пор, пока не введёт разрешённое число — от одного до трёх (или меньше — если камней осталось меньше). При вводе некорректного значения необходимо вывести фразу: Некорректный ход: и заново потребовать вводить данные. После хода игрока или ИИ необходимо вывести два числа: сколько камней было взято и сколько камней осталось в куче. Если выигрывает игрок, то надо вывести фразу: Вы выиграли!, а если ИИ - фразу: ИИ выиграл! Все сообщения программы должны строго соответствовать условию.Ответы на вопрос
Ответ (на Python):
n = int(input())
while n > 0:
n1 = n % 4
if n1 == 0:
n1 = 2
n -= n1
print(n1, n)
if n == 0:
print('ИИ выиграл!')
else:
n1 = int(input())
while not (1 <= n1 <= 3 and n1 <= n):
print('Некорректный ход:', n1)
n1 = int(input())
n -= n1
print(n1, n)
if n == 0:
print('Вы выиграли!')
Для решения этой задачи можно использовать стратегию "остаток". Это стратегия, при которой игрок всегда пытается оставить у противника остаток от деления количества камней на 4. Если остаток равен 0, 1 или 2, игрок берет 1, 2 или 3 камня соответственно. Если остаток равен 3, игрок берет все камни. Это гарантирует, что игрок всегда будет выигрывать, если количество камней в куче больше 4.
Вот пример программы на Python, которая реализует эту стратегию:
```python def ai_move(stones): return (stones - 4) % 4
def game(stones): print("Игра начинается. У вас есть", stones, "камней.") while stones > 0: ai_stones = ai_move(stones) stones -= ai_stones print("Я забрал", ai_stones, "камней. У вас осталось", stones, "камней.") if stones == 0: print("ИИ выиграл!") break try: user_stones = int(input("Ваш ход. Сколько камней вы хотите забрать? ")) if user_stones < 1 or user_stones > 3 or user_stones > stones: raise ValueError except ValueError: print("Некорректный ход. Попробуйте снова.") continue stones -= user_stones print("Вы забрали", user_stones, "камней. У вас осталось", stones, "камней.") if stones == 0: print("Вы выиграли!") break return ```
В этой программе функция `ai_move` определяет, сколько камней должен забрать ИИ. Функция `game` управляет ходом игры, делая ходы ИИ и пользователя, пока не закончатся камни. Если пользователь вводит некорректное число, программа выводит сообщение об ошибке и просит его ввести число снова.
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili
