🖥 Задача Единственный выживший



Это вариант классической задачи Иосифа Флавия. В кругу стоят n человек, пронумерованных числами от 1 до n. Начинается расчет, при котором каждый k-й по счету человек выбывает из круга, после чего счет продолжается со следующего за ним человека. Напишите программу, определяющую номер человека, который останется в кругу последним.



Входные данные:



Числа n и k на отдельных строках.



#Пример ввода

9 3



Выходные данные:



Номер последнего оставшегося человека.



#Пример вывода

1



Решение

Способ 1:




n, k = int(input()), int(input())

last = 0

for i in range(1, n + 1):

last = (last + k) % i

print(last + 1)





Способ 2 – рекурсия:



def lastSurvivor(n, k):

if n == 1:

return 1

elif n > 1:

return (1 + (lastSurvivor(n - 1, k) + k - 1) % n)



n, k = int(input()), int(input())

print(lastSurvivor(n, k))




@python_job_interview