约瑟夫生者死者小游戏
题目——
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
程序——
方法一:无算法运算
poeple = [] + [1] * 31
check = 0 #报数9的检查
i = 1 #列表总数31的检查
leaveN = 0 #下船人数计算
while i <= 31:
if i == 31:
i =1
elif leaveN == 15:
break
else:
if poeple[i] == 1:
check +=1
if check == 9:
print(f'{i}号下船')
poeple[i] =0
check =0
leaveN +=1
i +=1 #无论poeple值为多少,都会执行i+1
方法二:算法队列,利用队列先进先出的原理
fromqueue importQueue
N = 30 #船上总人数
q = Queue(N) #建立一个长度为30的堆栈
for iin range(1, N + 1): #给堆栈赋值1~30
q.put(i)
#print(q.get())
check = 0 #报数检测9
leaveN = 0 #下船人数记录
whileleaveN < 15:
check +=1
temp = q.get() #前进先出
if check == 9:
print(f'{temp}号下船')
check =0
leaveN +=1
else:
q.put(temp) #进入队列
延伸
queue模块学习
基础使用函数
q=queue.Queue(n) #建立长度为n的先进先出队列FIFO
q=q=queue.LifoQueue(n) #建立长度为n的后进先出队列LIFO
q.put() #放入元素
q.get() #取出元素
网友评论