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)

  

posted on 2019-03-17 17:11  kl_1998  阅读(471)  评论(0编辑  收藏  举报

导航