美文网首页
【基础】Python3小程序_约瑟夫生者死者小游戏

【基础】Python3小程序_约瑟夫生者死者小游戏

作者: Alyna_C | 来源:发表于2021-04-04 07:33 被阅读0次

    约瑟夫生者死者小游戏

    题目——

    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() #取出元素

    模块其他函数https://www.ywnds.com/?p=11912

    相关文章

      网友评论

          本文标题:【基础】Python3小程序_约瑟夫生者死者小游戏

          本文链接:https://www.haomeiwen.com/subject/dmuahltx.html