'''
问题描述:N个人围成一圈,从第一个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,报到m的人出圈;如此往复,直到所有人出圈。(模拟此过程,输出出圈的人的序号)
解决方案:这道题涉及到的算法叫做约瑟夫算法,需要将列表内所有数类似排列成一个圈来解决,需要将前一次删除后剩下的元素的索引不变,但是位置镶嵌提,无限循环这个圈,直到删除到只剩一个
这道题的关键在于如何将每个数的索引数字固定,在删除前一个数字后,后面的数字都应该在排序中加一。所以我们需要创建一个列表,从1开始含有位数的数字,代表每个数字的索引列表
'''
1 def josephus(n,k): 2 # n代表总人数,K代表报数的数字 3 List = list(range(1,n+1)) 4 index = 0 5 while List: 6 temp = List.pop(0) 7 index += 1 8 if index == k: 9 index = 0 10 continue 11 List.append(temp) 12 if len(List) == 1: 13 print(List) 14 break 15 if __name__ == '__main__': 16 josephus(10,3)