Python实现环性队列,解决约瑟夫斯站位问题
弗拉维奥·约瑟夫斯是公元1世纪著名的历史学家。相传,约瑟夫斯当年和39个战友在山洞中对抗罗马军队。眼看着即将失败,他们决定舍生取义。于是,他们围成一圈,从某个人开始,按顺时针方向杀掉第7人。约瑟夫斯同时也是卓有成就的数学家。据说,他立刻找到了自己应该站的位置,从而使自己活到了最后。当只剩下他时,约瑟夫斯加入了罗马军队,而不是自杀。这个故事有很多版本,有的说是每隔两个人,有的说最后一个人可以骑马逃跑。不管如何,问题都是一样的。
本题目尤其适合使用队列进行问题模拟,因为站位是一个环形剔除的问题。
队列的性质就是后进前出,如果每次都将pop的尾巴添加回到顶部,那么就动态地行成一个循环,然后只需要设定步长,定期弹出直到队列长度为1(剩下最后一个人),这样便轻易而且巧妙地解决了约瑟夫斯问题。
python实现:
#定义队列
class Queue:
#初始化一个队列:
def __init__(</