5.队列的应用案例-烫手的山芋

Posted yanghongtao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.队列的应用案例-烫手的山芋相关的知识,希望对你有一定的参考价值。

 

烫手山芋游戏介绍:6个孩子围城一个圈,排列顺序孩子们自己指定。第一个孩子手里有一个烫手的山芋,需要在计时器计时1秒后将山芋传递给下一个孩子,依次类推。规则是,在计时器每计时7秒时,手里有山芋的孩子退出游戏。该游戏直到剩下一个孩子时结束,最后剩下的孩子获胜。请使用队列实现该游戏策略,排在第几个位置最终会获胜。

  - 这个游戏相当于著名的约瑟夫问题,一个一世纪著名历史学家弗拉维奥·约瑟夫斯的传奇故事。故事讲的是,他和他的 39 个战友被罗马军队包围在洞中。他们决定宁愿死,也不成为罗马人的奴隶。他们围成一个圈,其中一人被指定为第一个人,顺时针报数到第七人,就将他杀死。约瑟夫斯是一个成功的数学家,他立即想出了应该坐到哪才能成为最后一人。

 

分析:为了模拟这个圈,我们可以使用队列。假设游戏开始时,排在队列中的第一个(队首)的孩子手里拿着山芋。游戏开始后,拿着山芋的孩子出队列然后再入队列,将山芋传递给下一个孩子。每当山芋到队首孩子手里后,队首的孩子先出队列再入队列,一次类推。当传递六次后,手里有山芋的孩子淘汰,游戏继续,继续传递山芋。

技术图片
from 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):
            kid = simqueue.dequeue()
            simqueue.enqueue(kid)

        simqueue.dequeue()

    return simqueue.dequeue()

print(hotPotato(["Bill","David","Susan","Jane","Kent","Brad"],7))
技术图片

 

 
 
 

以上是关于5.队列的应用案例-烫手的山芋的主要内容,如果未能解决你的问题,请参考以下文章

python--使用队列结构来模拟烫手山芋的游戏

美元变成了烫手山芋?原先看涨的人 现在坐不住了

前端到底是求职者的乐士还是日渐成为烫手的山芋?

今日BBC

无法入土为安的领袖

02-移动端单位介绍