Flavius Josephus/热口袋模拟
Flavius Josephus/ Hot Pocket simulation
所以我正在阅读 Problem Solving Using Data Structures Python,其中作者实现了一个队列来模拟著名的热 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)))
那我做错了什么?任何帮助表示赞赏。提前致谢!
可能您遇到了一些缩进问题,下面脚本的输出是 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)
所以我正在阅读 Problem Solving Using Data Structures Python,其中作者实现了一个队列来模拟著名的热 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)))
那我做错了什么?任何帮助表示赞赏。提前致谢!
可能您遇到了一些缩进问题,下面脚本的输出是 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)