Python 约瑟夫问题

约瑟夫问题:有x个人围成一圈,从某个人开始报数,报到y数的人自杀,然后从死掉的这个人的下一个人开始重新报数,循环往复,一直到剩下一个人。

class Queue():
    # 使用python内置的list,实现简单的队列
    def __init__(self):
        self.queue = []
    
    def inqueue(self,item):      # 入队
        self.queue.append(item)
    
    def outqueue(self):          # 出队
        poped = self.queue.pop(0)
        return poped
    
    def size(self):              # 队列大小
        return len(self.queue)
    
    def __str__(self):           # 打印队列(打印一个对象时,会打印它的__str__函数的返回值。)
        return repr(self.queue)


def yue(list,num):
    queue = Queue()
    for li in list:
        queue.inqueue(li)
    print(queue)                  # 打印初始队列
    while queue.size() > 1:        # 只要队列人数大于一
        for i in range(num-1):        # 循环num-1个数
            queue.inqueue(queue.outqueue())    # 队首的人拍到队尾
            print(queue)
        queue.outqueue()           # 数到num的人出队死掉了
    return queue.outqueue()


print(yue(['a','b','c'],3))
posted @ 2020-05-22 21:23  wztshine  阅读(554)  评论(0编辑  收藏  举报