【问题描述】
约瑟夫环问题:n个人围成一圈,从第一个人开始报数,数到m的人出圈;再由下一个人开始报数,数到m的人出圈;…输出依次出圈的人的编号。n,m由键盘输入。
【算法代码一:输出出圈序列】
n,m=map(int,input().split())
ls=[]
for i in range(1,n+1):
ls.append(i)
cnt=0
while len(ls)>1:
t=len(ls)
while t<m:
m=m-t
x=ls.pop(m-1)
ls=ls+ls[0:m-1]
for i in range(0,m-1):
ls.remove(ls[0])
cnt+=1
print(x,end=" ")
print(ls[0])
'''
in:
10 3
out:
3 6 9 2 7 1 8 5 10 4
'''
【程序代码二:输出最后出圈的人】
n,m=map(int,input().split())
ls=[]
for i in range(1,n+1):
ls.append(i)
cnt=0
while len(ls)>1:
cnt+=1
if cnt==m:
cnt=0
ls.remove(ls[0])
else:
ls.append(ls[0])
ls.remove(ls[0])
print(ls[0])
'''
in:
10 3
out:
4
'''