第3章 约瑟夫环
一大清早,天刚蒙蒙亮。
杨成洗漱完毕,匆忙吃了一点早餐,便来到了网吧。
他心中隐隐地对下一个关卡有了些期待。
作为一名准程序员,新鲜事物对于他总是很有吸引力的。
反倒是那些室友,杨成感觉更像是20世纪的人。
居然还玩横板格斗单机游戏...
能不能稍微有点追求啊!
杨成很快戴上头盔,进入了角色。
“叮!”
熟悉的系统音响起来。
“亲爱的挑战者,准备前往下一个关卡了嘛?”
“OK,一切就绪”。
杨成打出个胜利的手势。
“祝你好运!”
系统发出贴心的祝福,然后杨成的意识进入到了另外一个空间。
乔塔帕特小镇的夜晚并不宁静,此时月黑风高。
一群全副武装的士兵闯入了这里,他们戴着狼皮头盔,身穿坚韧的铠甲,手里拿着盾牌与标枪,身上还配着锋利的短剑。
这一切表面了他们的身份——残暴无比的罗马人。
“抓住每一个犹太人,记住,要活的!”
“我要亲自把匕首捅进这群吸血鬼的心脏!”
为首的罗马将领发布了不容置疑的命令,士兵们则开始了四处追捕。
而小镇的另一边出口,一群身穿黑色斗篷的人趁着茫茫夜色,行色匆匆地逃窜着。
“不能再这样下去了”。
有人说道。
“罗马人很快会追上来,我们逃不掉的”。
“我可不想死在那些刽子手的屠刀下!”
“还不如自我了结掉!”
有人哀嚎道。
这时,一个好事者跳了出来。
“我有个提议,咋们41个人排成一个圆圈,由第1个人开始报数,每报数到第3人这个人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止”。
“大家赞同吗?”
大部分人举起了手臂,只有两个人除外。
一个自然是杨成,他是来完成任务的,可不是来和这些SB纠缠不清的。
还有一个人,人们都称呼他为约瑟夫。
这厮据说是个历史学家或者说是数学家。
不过这显然无关紧要,反正大伙都得玩完儿。
约瑟夫眨巴着眼睛,眼中闪烁不定,不知道在想些什么。
其他人不认得杨成,却认得约瑟夫。
“约瑟夫,你想做胆小鬼吗?”
“没门!”
有人开始愤愤不平了。
“不不不”。
约瑟夫摇摇头。
“各位请先入场,我随后就来”。
杨成自然也是很识时务地点了点头,表示自己愿意顺从大家的意志。
约瑟夫瞟了杨成一眼,眼中多了一丝玩味,杨成则是低垂着头,一言不发。
事实上,他正在从全息菜单中调取代码编辑器面板,来一次死亡边缘的编程。
其他的犹太人走到一处空地上,开始组成一道死亡的环形队列。
杨成依然面不改色,他正在一个接一个字符地编写代码。
“总人数41,报数间隔3,余留人数1”。
杨成开始了初始化配置。
对于约瑟夫环问题,可以用循环列表来求解。
只要剩余人数大于1个,那么就执行两个操作,一是报数,二是杀人。
值得注意的是,循环列表有链表和数组两种实现方式,它们的效率是不一样的。
一般来说,用循环链表来解决Josephus问题效率会更高。
然而,时间不等人。
站在圈中的人开始不耐烦了。
“我说,那边那两个,还不过来是什么意思?!”
“不会要咋们亲自动手吧!”
“好的,让诸位久等了”。
约瑟夫眯着眼睛,走向人们。
他很快站定了位置,一脸的轻松自如。
杨成在虚拟编辑器上折腾了半天,最后一运行,好不容易求出了结果。
这结果告诉他,第三十一个位置才是最安全的,或者说是最后被干掉的。
他放眼一扫,发现第三十一位竟然被约瑟夫占据了。
“这狡猾的老家伙!”
杨成不禁唾骂一声。
原来这约瑟夫早就算出了最安全的位置,而自己还在这儿傻乎乎地敲代码。
这其实也只能怪杨成自己,他用循环列表求解约瑟夫环,要模拟整个游戏的过程。
不但程序写起来很麻烦,而且执行的效率还很低。
如果只是要求出最后的胜利者序号,实施一点数学策略就可以做到。
我应该找一个公式来算的!
不过来不及了,再这么下去杨成就会被暴怒而绝望的犹太人撕成碎片了。
于是他加快了思维速度。
事实上呢,因为他初始化配置非常得当。
只需要稍稍地改变一下程序代码,把余留人数从1改成2,不就OK了嘛?
程序再次运行,他很快得到了自己应该站的位置——16。
杨成站好了地方,这场死亡游戏便拉开了序幕。
“1”,第一个人吹响了死亡的号角。
“2”,第二个人暂避了风险,不过殊途同归。
“3”,报到这个数字的人,面色惨白,然后,他绝望地掏出一支匕首,狠狠地划向自己的肌肤。
“噗通!”
鲜血染红了草地,死神继续挥舞着杀戮的镰刀。
“1...”
“2...”
刚才还站立着的人,此时已经倒了个七七八八。
而约瑟夫和杨成就好比暴风雨中的两艘巨舰一般,继续乘风破浪,毫无顾忌。
有些人看出了点端倪,但在绝望中都只是徒劳的。
就算是没自杀,那些粗鲁野蛮的罗马人会留活口吗?
“噗通!”
倒数第三位的人倒在了血泊之中。
约瑟夫紧盯着眼前这个年轻人,他根本不像是犹太人,更像来自东方的旅人。
“我说,你怎么不报数了?”
约瑟夫目光中流露出一丝狡黠。
“约瑟夫先生,你很聪明”。
对于这种智者,杨成毫不吝惜赞美之词。
“哦?你的意思我不明白”。
约瑟夫还在装糊涂。
“我的目的和你是一样的!”
杨成平视约瑟夫,后者微微一愣。
“那就是活下去!”
说完,杨成转过身子,走进了丛林深处。
“有趣的小子”。
约瑟夫丢下这句话,也是一转身,逃了个无影无踪。
这时,东方的地平线上第一缕曙光开始出现,地面上横七竖八的尸体也消失不见了。
“叮!”
愉悦的系统声音响起来。
“恭喜玩家您完成了约瑟夫环的任务”。
“先前积分15分”。
“循环列表求解约瑟夫环奖励2分”。
“当前积分17分,击败了全球11%的玩家”。
“才2分,太少了吧”。
杨成玩了几把游戏,也算是开阔了一些眼界。
“您现在准备开始下一个挑战嘛?”
杨成伸了伸懒腰。
“马上开始吧,大爷现在精力充沛,打几个怪升升级没有半点问题”。