Как в Python считать по кругу?

Приветствую

Пытаюсь понять как в python считать по кругу, но туговато получается.

Задача:

Есть 30 человек в круге. Ведущий выгоняет по кругу каждого n-ного человека. Нужно определить номер человека, который останется в итоге и по возможности порядковые номера исключенных из круга.


Подскажите пожалуйста варианты решения этой задачи.
  • Вопрос задан
  • 5216 просмотров
Пригласить эксперта
Ответы на вопрос 4
@n1cew0lf
Sysadmin
Бесподобная вики опять помогает:
https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D...

Задача Иосифа Флавия. И алгоритм тоже есть :)
Ответ написан
@abcd0x00
>>> import collections
>>> 
>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> n = 5
>>> 
>>> deq = collections.deque(enumerate(lst))
>>> 
>>> while len(deq) > 1:
...     deq.rotate(-n)
...     print(deq.pop())
... 
(4, 5)
(0, 1)
(6, 7)
(3, 4)
(2, 3)
(5, 6)
(8, 9)
(1, 2)
>>> print(deq)
deque([(7, 8)])
>>>
Ответ написан
Комментировать
abs0lut
@abs0lut
как в python считать по кругу

>>> import itertools
>>> foo = itertools.cycle((1,2,3))
>>> for i in range(7):
	     next(foo)	
1
2
3
1
2
3
1
>>>
Ответ написан
Комментировать
@t3sOne
user_members = 3 #int(input('Введите количество человек :'))
reader_number = 7 #int(input('Введите число в считалке :'))
print('Значит выбывает каждый', reader_number, '- й человек!')

members_list = list(range(1, user_members +1))
print('Текущий круг людей :', members_list)

while len(members_list) != 1:
result = abs(len(members_list) - reader_number)
if result > len(members_list):
while result >= len(members_list):
result -= len(members_list)
if result <= len(members_list):
print('Выбывает игрок под номером :', members_list[result-1])
members_list.remove(members_list[result-1])
print(members_list)

print('Остался игрок под номером :', str(members_list[0]))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
02 нояб. 2024, в 21:08
2000000 руб./за проект
02 нояб. 2024, в 20:34
40000 руб./за проект
02 нояб. 2024, в 20:05
800 руб./в час