故事:
约瑟夫问题(Josephus Problem)据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。
然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
原题:
用户输入M,N值,N个人围成一个环,从0号人开始数,数到M,那个人就退出游戏,直到最后一个人
求最后一个剩下的人是几号?
(约瑟夫环问题 Josephus)
首先是比较容易看得懂的。。
Python代码
- def Josephus(n,m):
- #自动身成列表,从0开始 到n-1
- people = list(range(n))
- m-=1
- k=m%n;
- while(len(people ) >1):
- del list[k]
- k= (k+m) % len(people )
- return people [0]
说实话,感觉还是因为python的数据结构强大,list del掉自动补位,其他语言估计要费力些