i = 0;
while True:
if len(source) == 1: return source[0]
if i > len(source) - 1:
i = 0
if cursor + 1 == k:
del(source[i])
cursor = 0
else:
cursor += 1
i+=1
print(josephus_survivor(7,3))
print(josephus_survivor(4919,3888))
Каким образом можно это ускорить?
Есть догадка использовать связный список вместо обычного листа, но пока впадлу переделывать
Если моя догадка верна, дайте знать, завтра попытаюсь доделать
N - количество элементов в последовательности с 1 до N
К - какой нужно удалять из списка
Список идет по кругу, пока не останется 1 элемент
Связный список, да, только взять готовый из стандартной библиотеки: from collections import deque def josephus_survivor(n, k): source = deque(range(1, n + 1)) for _ in range(n - 1): source.rotate(-(k - 1)) source.popleft() return source.pop()
Обсуждают сегодня