На этом сайте есть вопрос, который похож на этот вопрос, но я добавил изюминку.
У вас есть три входа: количество людей в круге n , k-й человек, отсчитываемый на каждом шаге, и q-й человек, который выжил. Люди в круге пронумерованы от 1 до n .
Например, в кругу из 20 человек выживший 20-й - это самый первый удаленный человек, оставшийся в живых 19-й - второй удаленный человек и так далее. Обычно проблема Иосифа заключается в том, чтобы определить, кто из последних удален, здесь его называют первым выжившим.
Напишите самую короткую программу или функцию, которая с этими тремя входными данными возвращает номер q-го человека, который выжил.
Если есть какие-либо вопросы с ясностью, пожалуйста, дайте мне знать.
Некоторые примеры:
>>> josephus(20, 3, 9)
4
>>> josephus(4, 3, 1)
1
>>> josephus(100, 9, 12)
46
Изменить: Предположим, что все входные данные действительны То есть никто не попросит 0 или отрицательных чисел, и никто не попросит 20-го выжившего в кругу из 5 человек (то есть 1 ≤ q ≤ n)
Изменить: Я приму ответ в полночь UTC + 7 в начале 2 декабря.
q=1
это точно так же, как связанный вопрос Иосифа, верно?