4078: 练5.7 约瑟夫问题
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:7
解决:2
题目描述
N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M的人出圈;…输出依次出圈的人的编号。
输入
输入N和M。
输出
输出一行,依次出圈的人的编号。
样例输入 复制
8 5
样例输出 复制
5 2 8 7 1 4 6 3
提示
n,m=input().split() #共n人,报到m出圈 n=int(n) m=int(m) a=[False]*(n+1) #设置一个列表a[0..n],列表元素的初值是false f,t,s=0,0,0 while f!=n: #直到所有的人都出圈为止 t+=1 #逐个枚举圈中的所有位置 if t==n+1: #列表模拟环状,最后一个与第一个相连 t=1 if a[t]==False: #第t个位置上有人则报数 s+=1 if s==m: #当前报的数是m s=0 #计数器清零 print(t,end=' ') #输出出圈人的编号 a[t]=True #此处的人已出圈,设置为空 f+=1 #出圈的人数增加一个