约瑟夫算法

两盒软妹~` 提交于 2019-11-28 19:31:30

python实现约瑟夫算法

什么是约瑟夫环?

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号123...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)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!