当前位置:   article > 正文

Python练习 | 约瑟夫生存小游戏(多种方法实现)_编写程序,实现约瑟夫生者死者小游戏:如:30 个人在一条船上,超载,需要 15 人下船。

编写程序,实现约瑟夫生者死者小游戏:如:30 个人在一条船上,超载,需要 15 人下船。

前言:

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

方法二: 利用切片来生成新的队列

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

方法三: 使用队列,先进先出原理

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)  #进入队列
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

运行结果如下:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/434919
推荐阅读
相关标签
  

闽ICP备14008679号