код по алгоритму Иосифа Флавия (последний выживший) выдает неправильные результаты с большими числами
Попытался написать программу на нахождение последнего в списке числа. Вводится число n (количество человек) и k (каждый k из списка удаляется). С маленькими числами программа работает корректно, но с большими (например 50 и 25) выдает неправильный ответ. Подскажите пожалуйста что не так) Прикладываю код:
n = int(input())
k = int(input())
m = [i for i in range(1, n + 1)]
while len(m) > 1:
del m[(k - 1) % len(m)]
m = m[(k - 1) % len(m):] + m[:(k - 1) % len(m)]
print(*m)
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
вот вы удалили (k - 1) % len(m) элемент
del m[(k - 1) % len(m)]
а зачем вы дальше формируете новый массив таким образом
m = m[(k - 1) % len(m):] + m[:(k - 1) % len(m)]
при этом используя новую длину массива
попробуйте так (для теста привел другой код алгоритма)
n = 50 #int(input())
k = 25 #int(input())
m = list(range(1, n + 1))
while len(m) > 1:
x = (k - 1) % len(m)
del m[x]
m = m[x:] + m[:x]
print(*m)
def f(n , m):
return 1 if n == 0 else 1 + (f(n - 1, m) + m - 1) % n
print(f(n, k))