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

原文链接:https://www.cnblogs.com/bobo-zhang/p/10525106.html

5.队列的应用案例-烫手的山芋
        </h1>
        <div class="clear"></div>
        <div class="postBody">

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

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

 

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

复制代码
from basic.queue import Queue

def hotPotato(namelist, num):
simqueue = Queue()
for name in namelist:
simqueue.enqueue(name)

</span><span style="color: #0000ff;">while</span> simqueue.size() &gt; 1<span style="color: #000000;">:
    </span><span style="color: #0000ff;">for</span> i <span style="color: #0000ff;">in</span><span style="color: #000000;"> range(num):
        kid </span>=<span style="color: #000000;"> simqueue.dequeue()
        simqueue.enqueue(kid)

    simqueue.dequeue()

</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> simqueue.dequeue()

print(hotPotato([“Bill”,“David”,“Susan”,“Jane”,“Kent”,“Brad”],7))

复制代码

 

<div id="blog_post_info">
0
0
<div class="clear"></div>
<div id="post_next_prev">

<a href="https://www.cnblogs.com/bobo-zhang/p/10524517.html" class="p_n_p_prefix">« </a> 上一篇:    <a href="https://www.cnblogs.com/bobo-zhang/p/10524517.html" title="发布于 2019-03-13 17:19">4.基本数据结构-队列</a>
<br>
<a href="https://www.cnblogs.com/bobo-zhang/p/10525482.html" class="p_n_p_prefix">» </a> 下一篇:    <a href="https://www.cnblogs.com/bobo-zhang/p/10525482.html" title="发布于 2019-03-13 19:14">6.基本数据结构-双端队列(Deque)</a>
posted @ 2019-03-13 18:43  波晓张  阅读( 372)  评论( 0编辑  收藏
</div><!--end: topics 文章、评论容器-->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值