Python旧版课程库
Python第 10 期 - 数据结构查看课程总览

306 约瑟夫问题2

306 约瑟夫问题2

  1. 循环队列的模拟
  2. 约瑟夫问题求解

循环队列的模拟

python内置了队列Queue, 可以方便的使用它来模拟循环队列,注意对Queue而言,get即是出队,put即为入队

q = Queue()
for i in range(m-1):
    cur = q.get() # 出队列
    q.put(cur) # 重新入队列

约瑟夫问题求解

使用Queue获得一个队列,模拟约瑟夫问题的过程,下面是完整的实现,输出为出队的顺序

from queue import Queue

def josepRing(nums, m):
    q = Queue()
    for i in nums:
        q.put(i)       
    while not q.empty():
        for i in range(m-1):
            cur = q.get()
            q.put(cur)     # 重新入队列     
        print(q.get())   # 打印出队列
josepRing([1, 2, 3, 4, 5], 5)

小结

  • 掌握循环队列的模拟
  • 掌握约瑟夫问题的求解
  • 习题

    1. 思考还可以怎么求解约瑟夫问题
    2. 自己编写一遍约瑟夫问题的求解