Flavius-Josephus/热袋模拟

2024-09-28 03:18:59 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在读Problem Solving Using Data Structures Python,作者实现了一个队列来模拟著名的hotpoock/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)))

我做错什么了?感谢任何帮助。提前谢谢!在


Tags: self程序forsizereturnqueuedefitems
1条回答
网友
1楼 · 发布于 2024-09-28 03:18:59

也许您有一些缩进问题,下面脚本的输出是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)

相关问题 更多 >

    热门问题