约瑟夫环问题小升级
问题描述:
已知n个人(以编号0,1,2,3…n-1分别表示)围坐在一张圆桌周围。从编号为0的人开始报数1,数到m的那个人出列;他的下一个人又从1开始报数,数到m+1的那个人又出列(每次报数值加1);依此规律重复下去,直到圆桌周围的人全部出列。
输入格式:两个正整数n, m,其中3<=n<=100, 1<=m<=n
输出格式:按照顺序出列的人的编号列表
输入样例:
5
2
输出样例:
[1, 4, 0, 2, 3]
输入样例:
12
3
输出样例:
[2, 6, 11, 7, 4, 5, 10, 9, 3, 1, 8, 0]
n=eval(input())
m=eval(input())
def fact(a,m):
if len(a)==1:
y.append(a[0])
else:
num=(m-1)%len(a)
if num==len(a)-1:
c=a[:num]
else:
c=list(a[num+1:]+a[:num]) #将数组重新排列
y.append(a[num])
fact(c,m+1)
x=list(range(n))
y=[]
fact(x, m)
print(y)