这个问题其实还有另外一个名称:猴子争大王或约瑟夫环问题。
使用队列的方式简单易懂,比数组来说又少了删除元素引起的元素迁移。
如下是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