'''
问题描述: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)