python - 约瑟夫问题
在罗马人占领乔塔帕特后,39 个犹太人与约瑟夫及他的朋友躲到一个洞中。39个犹太人决定宁愿死也不要被敌人俘虏,商定一种特殊的方式自杀,41个人排成一个圆圈,由第1个人开始报数,每报到第3人该人就必须自杀,直到所有人都自杀身亡为止。约瑟夫和他的朋友并不想死,约瑟夫怎样安排自己和朋友才能逃过一劫?
#man: 玩家个数 #sep: 杀死数到的第几个人 #rest: 剩余幸存者的数量 #将前两个数往后移,使得第三个数暴露在排头,方便删除 def move(man, sep): for i in range(sep): item = man.pop(0) man.append(item) def play(man = 41, sep = 3, rest = 2): print("总共%d个人,每报数到第%d个人自杀,最后剩余%d个人" % (man, sep, rest)) man = [i for i in range(1, man + 1)] print("玩家队列:", man) sep -= 1 #隔离第三个人的前两个人 while len(man) > rest: move(man, sep) print("kill", man.pop(0)) return man servive = play() print("最后逃生的人的编号是:", servive)