【问题标题】:Flavius Josephus/ Hot Pocket simulationFlavius Josephus/热袋模拟
【发布时间】:2015-05-25 04:45:33
【问题描述】:

所以我在阅读Problem Solving Using Data Structures Python,作者实现了一个队列来模拟著名的 Hot Pocket/Josephus 执行问题。但是,我相信这个实现是不正确的,因为无论我尝试了多少次,程序计算的最后一个幸存者都与我的计算不匹配。例如,对于输入 ([0,1,2,3,4],2)),输出不应该是 3 而不是 1 吗?(因为它首先消除了 2,所以按照模式,顺序执行应该是 2,4,1,0,3 使 3 成为最后的幸存者。)但是程序给出的输出是 1。

这是完整的实现:

    class Queue:
def __init__(self):
    self.items = []

def isEmpty(self):
    return self.items == []

def enqueue(self, item):
    self.items.insert(0,item)

def dequeue(self):
    return self.items.pop()

def size(self):
    return len(self.items)

def hotPotato(namelist, num):
simqueue = Queue()
for name in namelist:
    simqueue.enqueue(name)

while simqueue.size() > 1:
    for i in range(num):
        simqueue.enqueue(simqueue.dequeue())

    simqueue.dequeue()

return simqueue.dequeue()

print(hotPotato(([0,1,2,3,4],2)))

那我做错了什么?任何帮助表示赞赏。提前致谢!

【问题讨论】:

    标签: python algorithm queue josephus


    【解决方案1】:

    也许你有一些缩进问题,下面脚本的输出是 3 - 正如你所建议的那样。

    class Queue:
        def __init__(self):
            self.items = []
    
        def isEmpty(self):
            return self.items == []
    
        def enqueue(self, item):
            self.items.insert(0,item)
    
        def dequeue(self):
            return self.items.pop()
    
        def size(self):
            return len(self.items)
    
    def hotPotato(namelist, num):
        simqueue = Queue()
        for name in namelist:
            simqueue.enqueue(name)
    
        while simqueue.size() > 1:
            for i in range(num):
                simqueue.enqueue(simqueue.dequeue())
    
            simqueue.dequeue()
    
        return simqueue.dequeue()
    print hotPotato([0,1,2,3,4],2)
    

    【讨论】:

      猜你喜欢
      • 2016-03-18
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      相关资源
      最近更新 更多