队列实现约瑟夫问题
2020-02-20 本文已影响0人
清水秋香
- 约瑟夫问题
传说犹太人反叛罗马人,落到困境,约瑟夫和39 人决定殉难,坐成一圈儿,报数1~7,报到7的 人由旁边杀死,结果约瑟夫给自己安排了个位置 ,最后活了下来......
❖ 模拟程序采用队列来存放所有参加游戏的人名, 按照传递土豆方向从队首排到队尾
游戏时,队首始终是持有土豆的人
❖ 模拟游戏开始,只需要将队首的人出队,随即再 到队尾入队,算是土豆的一次传递
传递了num次后,将队首的人移除,不再入队 如此反复,直到队列中剩余1人
from pythonds.basic.queue import Queue
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(["Bill",'David','susan','jane','kent','brad'],7))