首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flavius Josephus/ Hot模拟

Flavius Josephus/ Hot模拟
EN

Stack Overflow用户
提问于 2015-05-25 04:45:33
回答 1查看 467关注 0票数 1

因此,我正在阅读使用数据结构Python解决问题,其中作者实现了一个队列来模拟著名的Hot /Josephus执行问题。但是,我认为这种实现是不正确的,因为无论我尝试了多少次,程序计算出来的最后一个幸存者与我的计算结果并不匹配。例如,对于输入(0,1,2,3,4,2),不应该输出为3而不是1?(因为它首先消除了2,所以按照模式,执行的顺序应该是2,4,1,0,3,使3成为最后的幸存者)。但该程序的输出为1。

以下是完整的实现:

代码语言:javascript
复制
    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)))

那我做错什么了?任何帮助都是非常感谢的。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-25 05:26:01

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

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30431385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档