题目描述
n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰 n-1 名小朋友,而该题是全部出圈。
输入格式
输入两个整数 n,m。
输出格式
输出一行 n 个整数,按顺序输出每个出圈人的编号。
输入输出样例
输入1
10 3
输出1
3 6 9 2 7 1 8 5 10 4
思路: 本体主要考察了队列的应用,利用队列的先进先出特性,将原本的约瑟夫问题稍加修改优化即可AC
代码如下:
import queue # 导入Python自带的queue标准库可以实现队列、栈、优先队列
def josephus(num1, num2):
q = queue.Queue() # 声明q是一个队列
for i in range(1, num1 + 1): # 数字依次导入
q.put(i)
while q.qsize() > 0:
for i in range(num2 - 1): # 死亡计数,被点到的出列
q.put(q.get())
print(q.get(), end=' ') # 输出出列数
n, m = map(int, input().split())
josephus(n, m)