30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
# 约瑟夫生者死者小游戏
"""
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
"""
# 建立一个字典,用于标志状态,状态为1为留下,状态为0为下船
people = {}
for x in range(1, 31):
people[x] = 1
check = 0 # 用于标志是否下船
i = 1 # 用于标志每个人的编号
j = 0 # 用于标志下船的人数
# 利用while循环
while i <= 31:
if i == 31:
i = 1
elif j == 15: # 下船人数达到15,循环结束
break
else:
if people[i] == 0:
i += 1
continue
else:
check += 1
if check == 9:
people[i] = 0
check = 0
print(f"{i}号下船了")
j += 1
else:
i += 1
continue
运行结果:
D:\PYTHON\python\python.exe D:/PYTHON/demo/P14.py
9号下船了
18号下船了
27号下船了
6号下船了
16号下船了
26号下船了
7号下船了
19号下船了
30号下船了
12号下船了
24号下船了
8号下船了
22号下船了
5号下船了
23号下船了
Process finished with exit code 0