Top.Mail.Ru

Задачу можно решить с помощью структуры данных “список” и алгоритма симуляции игры.

1. Создаем список людей, пронумерованных от 1 до N.

2. Заводим переменную “текущий_индекс” и присваиваем ей значение 0.

3. Начинаем цикл, который будет выполняться до тех пор, пока в списке остается больше одного человека. Внутри цикла делаем следующее:
– Увеличиваем “текущий_индекс” на K-1. Таким образом, мы сдвигаемся на K позиций вперед от текущего положения.
– Если “текущий_индекс” становится больше или равным длине списка, мы вычитаем из него длину списка, чтобы вернуться к началу круга.
– Удаляем человека с индексом “текущий_индекс” из списка.
– Если “текущий_индекс” стал больше или равным длине списка после удаления, мы снова вычитаем из него длину списка.

4. Выводим номер оставшегося человека, который будет равен значению списка на первой позиции.

Таким образом, мы будем “считать” вперед по кругу, удалять выбывающих людей и обновлять текущий индекс для следующего шага игры. Остающийся в кругу человек будет иметь номер, сохраненный в списке на первой позиции после выполнения всех шагов.

Пример решения на Python:

“`python
def last_person_standing(N, K):
circle = list(range(1, N + 1))
current_index = 0

while len(circle) > 1:
current_index = (current_index + K – 1) % len(circle)
circle.pop(current_index)

return circle[0]

N = int(input(“Введите количество человек: “))
K = int(input(“Введите номер выбывающего: “))

result = last_person_standing(N, K)
print(“Оставшийся человек:”, result)
“`

Данный код считывает входные данные, вызывает функцию `last_person_standing` и выводит результат на экран. Можно протестировать код с разными значениями N и K, чтобы убедиться в его корректности.

   
[metform form_id="1136"]