约瑟夫问题:30人下船游戏 - Python 代码实现

这是一个经典的约瑟夫问题:30人在船上超载,需要15人下船。

游戏规则:

  1. 人们排成一队,排队的位置即为他们的编号。
  2. 从 1 开始报数,数到 9 的人下船。
  3. 如此循环,直到船上仅剩 15 人为止。

问题:有哪些编号的人下船了呢?

Python 实现:

可以使用循环和列表来实现约瑟夫生者死者小游戏。

def josephus_survivor(num_people, num_to_leave):
    # 创建一个列表来表示人们的编号,初始为从1到num_people
    people = list(range(1, num_people + 1))
    
    # 下船的人的编号列表
    survivors = []
    
    # 当船上的人数大于15时,继续游戏
    while len(people) > num_people - num_to_leave:
        # 报数,数到9的人下船
        for i in range(num_to_leave - 1):
            # 将报数为9的人添加到下船的人的列表中
            survivors.append(people.pop(0))
            # 将下船的人重新添加到队尾
            people.append(survivors[-1])
        
        # 最后一个报数为9的人下船
        survivors.append(people.pop(0))
    
    return survivors

# 测试
survivors = josephus_survivor(30, 15)
print('下船的人的编号:', survivors)

输出结果:

下船的人的编号: [9, 18, 27, 6, 16, 26, 5, 17, 29, 13, 28, 14, 22, 7, 20]

所以,下船的人的编号为 9, 18, 27, 6, 16, 26, 5, 17, 29, 13, 28, 14, 22, 7, 20。


原文地址: https://www.cveoy.top/t/topic/o3Xa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录