python-约瑟夫环

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

 

posted on 2022-03-15 17:00  Wuxuanlin  阅读(894)  评论(0编辑  收藏  举报