赞
踩
Python 约瑟夫生者死者小游戏:30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号,从 1 开始报数,报数为9的下船,最终船上剩下15人…
方法一: 循环遍历
list=list(range(30))
countNum=1
while countNum<=15:
i=1
while i<9:
list.append(list.pop(0))
#循环遍历 每遍历一个元素,把当前元素追加到列表末尾
i+=1
print("{}号下船了".format(list.pop(0)+1))
countNum +=1
方法二: 利用切片来生成新的队列
list=list(range(1,31))
countNum=1
for i in list:
if countNum<=15:
print("{}号下船了".format(list[8]))
list=list[9:]+list[:8]
countNum+=1
方法三: 使用队列,先进先出原理
from queue import Queue N=30 q=Queue(N) #建立一个长度为30的堆栈 for i in range(1,N+1): #给堆栈赋值1~30 q.put(i) check=0 #检测报数为9的号数 leaveNum=0 #下船的人数 while leaveNum<15: check +=1 t=q.get() #先进先出 if check==9: print(f'{t}号下船') check=0 leaveNum +=1 else: q.put(t) #进入队列
运行结果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。