Python-约瑟夫环

n个人(以编号0,1,2,3...n-1分别表示)围坐在一张圆桌周围。从编号为0的人开始报数1,数到m的那个人出列;

他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。按照顺序出列的人的编号列表

 1 def ysf(m,l):
 2     global nlist,k,plist
 3     if nlist == []:    # 全部出列退出递归
 4         return 0
 5 
 6     if l>=m:    # 将出列人员按顺序编入plist
 7         plist.append(nlist[m-1])
 8         ysf(m+k,l)
 9     else:    # 循环回列表,并将出列人编号移出nlist
10         for i in range(len(plist)):
11             if plist[i] in nlist:
12                 nlist.remove(plist[i])
13         m = m-l
14         ysf(m,len(nlist))
15 
16 def main(n):
17     global nlist,plist,k
18     nlist = list(range(n))
19     plist = []
20     k = int(input())
21     ysf(k,len(nlist))
22     print(plist)
23 
24 main(int(input()))

猜你喜欢

转载自www.cnblogs.com/abc987plm/p/10301702.html