python实现约瑟夫算法
什么是约瑟夫环?
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 [1] 结果+1即为原问题的解。
原理:
1、一群人围在一起坐成环状(就相当于圆桌会议)
2、从某个编号开始报数
3、数到某个数的时候,此人出列,下一个人重新报数
4、一直循环,直到所有人出列 ,约瑟夫环结束
图例
实例:
def ysf(n,k,m,f):
"""
约瑟夫环算法
:param n: 添加到环中n个数
:param k: 从环中第k个值开始数数
:param m: 数到m就把数踢出这个环
:param f: 最后剩余的个数
:return: None
"""
#产生一个约瑟夫环
lst = [i for i in range(1,n+1)]
t = k-1
#控制循环,踢出指定数量的元素
for i in range(n-f):
#挑出下一个被踢出的元素
t = (t+m-1)%len(lst)
#pop踢出
print ("Out:",lst.pop(t))
#留下的就是想要的结果
print ("留下的编号为: "+str(lst))
ysf(17,1,3,1)
来源:https://blog.csdn.net/qq_40890660/article/details/100116013