这个问题其实还有另外一个名称:猴子争大王或约瑟夫环问题。
使用队列的方式简单易懂,比数组来说又少了删除元素引起的元素迁移。
如下是Python代码,使用内置的deque队列,Java的话在util中也有现成的队列:
from collections import deque
while True:
try:
num = int(input())
# 生成元素并且放入队列中,队列左侧是0,右侧是最大数num-1
q = deque(range(num))
i = 1
current = None
while len(q) > 0:
# 弹出左边的一个
current = q.popleft()
if i % 3 != 0:
# 如果不是要删除的数,重新放入队列右侧
# 如果是要删除的队列,那么没放入队列就是如同删除了
q.append(current)
i += 1
print(current)
except:
break 


京公网安备 11010502036488号