安卓虚拟按键大师师的小黄点怎么才能始终出现

更多好玩美拍
违法和不良信息举报电话:-1084
举报邮箱:
联系地址:厦门市软件园二期望海路6#文广传媒2单元&&&Vizard虚拟现实开发指南
邀请好友参加吧
版 次:页 数:字 数:印刷时间:日开 本:16开纸 张:胶版纸包 装:平装-胶订是否套装:否国际标准书号ISBN:6所属分类:&&
下载免费当当读书APP
品味海量优质电子书,尊享优雅的阅读体验,只差手机下载一个当当读书APP
本商品暂无详情。
当当价:为商品的销售价,具体的成交价可能因会员使用优惠券、积分等发生变化,最终以订单结算页价格为准。
划线价:划线价格可能是图书封底定价、商品吊牌价、品牌专柜价或由品牌供应商提供的正品零售价(如厂商指导价、建议零售价等)或该商品曾经展示过的销售价等,由于地区、时间的差异化和市场行情波动,商品吊牌价、品牌专柜价等可能会与您购物时展示的不一致,该价格仅供您参考。
折扣:折扣指在划线价(图书定价、商品吊牌价、品牌专柜价、厂商指导价等)某一价格基础上计算出的优惠比例或优惠金额。如有疑问,您可在购买前联系客服咨询。
异常问题:如您发现活动商品销售价或促销信息有异常,请立即联系我们补正,以便您能顺利购物。
当当购物客户端手机端1元秒
当当读书客户端万本电子书免费读编程之战_起点中文网_小说下载
扫描下载起点读书客户端
  杨成是一位普普通通的大学生,作为一名计算机系的尖子生,他发现周边很多人都迷上了一款名为“代码战争”的游戏,在好奇心的驱使下,他去了好久没去过的一家网吧。  现在的网吧跟以前的完全不是一个概念了,由于VR技术的流行,原本的主机+显示器模式被替换成了VR终端,这一个个犹如摩托车头盔的玩意儿。  杨成选择了一个座位,然后熟练地戴上一个“头盔”。  眼前的视觉一暗,迅速地在眼前成像出一个三维立体的菜单。  “选择进入代码战争”,杨成缓缓地发出指令。  眼前很快出现了一个巨大的进度条,下方则是一个个在切换的进度提示:加载图片素材,加载UI特效,加载动画效果......  估摸着过了五秒钟的样子,一阵轻微的眩晕感袭来,整个世界陷入一片黑暗,犹如混沌未开。  再下一刻,杨成站在了实地上,一阵寒意袭来,让他不禁打了个寒颤。  云雾缭绕的群山之巅,终年有积雪不化,眼前有一幢犹如笔架般的高山,比这山巅更高,更宽阔!  更令人啧啧称奇的是眼前这高山的绝壁,岩石如同镜壁般光滑,真真是鬼斧神工,巧夺天工!  出现在杨成面前的还有一个并不起眼的东西,一台貌似21世纪初期出现的古董电脑。  这电脑并没有连上电源,甚至没有类似电源线的东西,杨成好奇地走过去。  对于程序员而言,大自然的美妙奇观自然是不如一台古董电脑来得有吸引力。  这电脑显示器闪烁着蓝色微光,上面有一些文字,杨成定睛一看。  “欢迎来到代码战争,为了表明你的玩家身份,请用你最熟悉的编程语言,编写HelloWorld!”  杨成挠了挠头,觉得有些乏味,他毕竟不是刚入门的菜鸟了,对于这种小把戏不感兴趣。  不过,为了进一步了解这个世界,他还是拿起了键盘,在上面敲了一通。  alert(“HelloWorld!”);  显示器沉默了一分钟,似乎在进行艰难的解析。  杨成本来想用JavaScript写个更通俗版的你好世界,比方说用console.log,比方用document.write,后者们似乎更加和谐。  但他觉得不够刺激,就来了个alert警告,鬼知道会发生什么事呢?  在杨成这样的“复古派”程序员看来,“平稳退化”与“渐进增强”原则是绝对要遵循的。  比方说console.log,这个玩意儿在老版本浏览器都不兼容,又是这么老的电脑,天知道会报什么样的bug?  再比方说,document.write,document是寄存在window对象上的,所以最保险最稳妥的是调用window对象的alert方法输出。假如这电脑连window都不支持,那document肯定没戏!  时间一分一秒地过去了,显示器还在一闪一闪地运转着。杨成等得不耐烦了,走到一边。  “警告!警告!”,这时四面八方犹如无数高音喇叭在播音,顿时吓了杨成一跳。  “什么鬼?!”,杨成四处张望,然后他看到眼前的绝壁上,大块大块的岩石纷纷跌落,滚落山崖。  一个个模模糊糊的英文字母和特殊符号逐渐成型,直到最后成为一个个肉眼可辨的字迹。  “HelloWorld!”,大气磅礴的几个字出现在了杨成的视线中。  “欧!买噶的!”,杨成一声惊呼。  “尊敬的玩家,恭喜您完成了我们的测试”,一个系统音出现在了杨成耳畔。  “由于您在测试中表现出色,我们为您开启了系列任务——斐波那契之旅,期待您更加精彩的表现!”
  神圣罗马帝国皇室图书馆,海量的书架井然有序。  一位头戴王冠的中年男子和一位学者在这里促膝长谈。  此时夜深人静,牛油烛散发出柔和的光芒,勉强能照亮小块区域。  “斐波那契,你这兔子问题,寡人想了很久都没有头绪”,中年男子挠了挠头。  腓特烈二世生平最大的业余爱好便是研究数学,而他眼前这位学者,便是他的座上客,大名鼎鼎的斐波那契。  “兔生二月便能繁衍,每月每对兔可生一对幼兔,则一年可得兔几何?”,腓特烈自言自语道。  “二月之后可新生一对兔,故三月为两对兔,四月幼兔不足两月,故为三对兔,以此类推...”,斐波那契耐心地解答。  “哈哈哈哈!爱卿果然才思敏捷!”,腓特烈二世竖起了大拇指,眼中满是赞赏之色。  “孤欲编纂《算书》,卿可为之”,说完,君臣两人离席。  斐波那契走在回住所的路上,脑海中却在回想刚才谈话的内容,似乎有所明悟。  “何不将该类问题,阐述为通项公式?”,他喃喃自语。  回到住所,斐波那契赶紧打开一个小册子,拿起鹅毛笔蘸了蘸墨水,写下刚才的想法。  “若有f(0)为0,f(1)为1,则f(n)为f(n-1)与f(n-2)之和”。  斐波那契抬头看了看窗外的月光,那树梢之上,停留着一只枯叶蝶,那蝴蝶似乎有所感应,循着灯光,翩翩飞舞。  斐波那契还在专注地思考着,根本没有察觉这只蝴蝶正朝着他飞过来。  那蝴蝶飞过了窗台,然后轻轻地落在了斐波那契的肩头。  下一刻,蝴蝶消失了,杨成的意识出现在了斐波那契脑海中。  “哇!”,杨成惊讶地看着自己这身古欧洲的学者服饰,然后摸了摸下巴。  他感觉自己的体貌特征来了个180度大转变。  眼前的小册子在烛光下浮现出一行行字,顿时吸引了杨成的注意力。  “已知斐波那契通项公式f(n)=f(n-1)+f(n-2),编写求第N项斐波那契数的函数,N在100以内”。  杨成瞪大了眼睛,这里电脑都没有,只有一枝鹅毛笔,怎么写啊?  手写?似乎问题也不是很大,求100项以内的斐波那契数,完全可以用简单的递归啊!  杨成回忆了一下,然后用鹅毛笔蘸了蘸墨水,在小册子上写了寥寥几行。  这是一种“教科书式”的分治法求解,要求第N项,那么就分解为求第N-1项和第N-2项,那N-1项又可以分解为求N-2和N-3项,以此类推,直到N为0,返回0,N为1,返回1.  但这种分治法之所以被称作“教科书式”,一是因为通俗易懂,二是因为效率低下。求重复的项数太多了,或者说重复计算太多了。  杨成很清楚这种方法的弊端,但应付100以内的,绰绰有余!  果不其然,在杨成写完最后一个括号后,手中的小册子绽放出一道金光。  小册子犹如脱离了重力的束缚一般,慢慢浮空,然后一页接一页地自动翻页,就好比有人在翻阅一般。
  “啪嗒”,小册子掉落在了桌子上。  杨成定睛一看,发现自己刚才手写的解题方法旁边多了一个小小的绿色对勾。  “唉,没啥挑战性啊”,杨成活动了一下筋骨。  话音刚落,然后,他看到那个小册子自动地翻过了一页,上面又浮现了一些笔迹。  “依上题,若N大于10000,且小于20000,作何解?”  杨成念完这新内容,皱了皱眉头。  “传统的分治法求斐波那契数列,只限于小数求解,到了万级再用一般性的递归,效率低不说,还有可能导致递归栈溢出”。  “那么如何在原来的代码上做修改,来达到提高性能的目的呢?”  杨成思索了片刻。  “既然分治法慢的根本在于重复性的计算太多,那么我可以使用缓存!”,杨成很快想到了解答方法,这得益于他有经常上博客论坛向大牛请教的习惯。  在JavaScript中,对象常用作为缓存,对于斐波那契数列这样的固定序列,用全局对象来缓存是最好的方法。  至于具体的逻辑,很好写:假如缓存中没有这一项,那就缓存进去,如果存在,就直接取出来,JavaScript对象本质上是散列表,或者说哈希表,而且这对象的存取效率高的令人发指,几乎可以忽略性能方面的开销了。  杨成在原本的解答上加了一些代码,用上了缓存的思想。  “这个题目加深了一些难度啊”,杨成揉了揉太阳穴,看着那小册子再次犹如中了“浮空术”一般晃悠悠地飞向了半空中,开始了不急不慢地翻页。  四周此时静寂无声,杨成看了看窗外,那高高的塔楼顶端,还有卫兵在守卫。  这一切的一切都无比地真实。  他试着把手伸出窗外,却被一种无形的力量阻隔在了屋内,脑海中更是响起一个系统音:“任务中,无法离开指定区域!”  他看了看四周,都是些寻常人家的东西。  不过,当他看到了一个小小的架在木炭上面的咖啡壶,一个小小的骨瓷咖啡杯,还有一碗研磨得细细的咖啡粉,顿时来了主意。  他捣鼓了一小会儿,折腾出了一杯看似咖啡的黑糊糊的东西,杨成看得直皱眉头。  这玩意儿能喝嘛?  既没有白糖,又没有牛奶,这东西估计和农药差不多味儿。  “不管了!”,杨成捏着鼻子,猛地灌了一口。  事实证明,咖啡的苦味有神效,他一下子恢复了精神,而且无比振奋。  半空中,小册子的翻页速度越来越快,最后猛地一合拢,“啪嗒”一声又掉落在了桌面上。  “这下子应该结束了吧”,杨成翻开小册子看了看。  在他刚才作答的那片区域旁边,又多了一个绿色对勾。  杨成感觉自己就像刚刚完成作业的小学生,等着老师的批阅。  这小册子果然没有辜负他的期待,稍等了片刻,一行行笔迹就再次出现在了空白的地方。  杨成这次终于流露出凝重的表情,这下子不是小改了,是大整改了!
  “依上题所述,若N在0000之间,作何解?”  杨成深吸一口气,他明白自己此前的思路已经走到了尽头,必须得换一种方式了。  对于递归而言,十万级以上是遥不可及的一道天堑,不管怎样使劲,都只有一种结局——挂。  所以,他决定了,放弃递归,使用传统的线性方法,顺序遍历求解。  递归不是顺序的,斐波那契数列的分治法是一种深度遍历求解,递归栈中函数作用域对象的开辟和回收都需要很多额外的性能,而顺序遍历不存在这样的情况。  顺序遍历共享的是同一个作用域!  可以使用两个临时的变量,因为公式f(n)=f(n-1)+f(n-2)的缘故,要求第n项你只需要分别保存第n-1项和第n-2项的结果。  这样做,将算法的空间复杂度降到了最低,和递归庞大的保存栈相比,优势就太大了。  想清了思路,杨成正打算提笔就写,他突然想到一个令人震惊的后果。  对于JavaScript,浮点数是有大小限制的,对于第几十万项的斐波那契数,它显然已经远远超出了浮点型的范围,那么,自己这个算法会不会导致溢出?  好在他很快想通了,关卡设计者怎么会想不到这样的问题,自己只要能写出正确的算法来就OK了。  这个算法其实并不难,杨成用了十几行代码就搞定了,他心里其实还是有些忐忑的,作为一名准程序员,有这种意识其实还是挺正常的。  不是有个笑话吗,假如有人问一名程序员:你的程序是不是出Bug了?这个程序员听到后第一反应是:傻x你懂程序嘛?你会用嘛?而如果有人问程序员:这个效果和预期的有些不一致呢。那程序员肯定心想:糟了!肯定是出Bug了!  杨成看着小册子第三次浮空,他有些习以为常了。  舒服地打了个哈欠,伸了伸懒腰,他发觉一个有趣的现象。  这窗外的月亮是不是太完美了,可以说是无暇的。  古人都常说:人有悲欢离合,月有阴晴圆缺,你这月亮做的也太假了一点吧?!  是不是美工姐姐被拖欠了工资啊?  杨成恶狠狠地想着,在心里恶搞了一番游戏团队。  然后他翘着二郎腿,再给自己来了一杯焦炭咖啡。  时间过得很慢,这次小册子被翻页的时间和次数都多得多,显然和数据量有关。  杨成甚至怀疑是台286电脑在充当服务器处理,现代电脑有这么辣鸡嘛?是不是并发量太大了,服务器被挤爆了的缘故呢?  等到杨成开始怀疑这个小册子组件模块编写者性别取向问题的时候,小册子终于完成了它的使命,“啪”的一声“坠机”了。  “玛德,至少过去了半个钟头”,杨成嘟哝着,再次翻开小册子某页。  刚才写的那十几行代码旁边,又多了一个小小的对勾。  然而,还没来得及为自己高超的“手写代码”能力欢呼雀跃,杨成很快看到了让自己张大嘴巴的一个景象。  “嚯!”,他不禁倒吸一口凉气,犹如泄了气的皮球,倒在了后椅上。  “先前的思路又得改!”
  “依上所述”,这字迹依旧在忠实地记录着题目,“若N在00000之间,作何解?”  这是一个典型的ACM问题,作为程序设计竞赛,很多题目都是很难,晦涩的,这道题目也有资格作为ACM的练手问题。  斐波那契传统的通项公式,已经无法满足这种需求了,或者说,已经被时代前沿抛弃了。  F(n)=F(n-1)+F(n-2)公式,面对这个问题,就如同蜗牛一般爬,让人无法忍受。  这也恰恰体现了时代的局限性,毕竟斐波那契时代距今也相差近千年了。  杨成闭着眼睛,开始回忆以前在网上搜索的那一个个例子。  斐波那契矩阵,两倍项公式渐渐浮现在他脑海中,杨成嘴角咧出一丝笑意。  既然f(n)的公式不行,那就用f(2n)的公式!  他思索了片刻,用鹅毛笔蘸了蘸墨水,写下了一行公式:  f(2n)=f(n-1)f(n)+f(n+1)f(n)  具体的算法他没有写,因为他并没有办法来验证程序的正确性,至于做单元测试,那更是想都别想。  令人惊讶的事很快发生了,这个两倍项公式被一个椭圆的金色线条环绕着,最后旁边也出现了个对勾。  “叮!”,一声清脆的系统音,“恭喜玩家您连续完成了阶段任务,请休息一刻钟,我们将为您准备该系列最后的一项挑战!”  “唉”,杨成感觉有些乏味了,这些题目确实比较益智,但总是一个人做,是不是太单调了。  于是他打开玩家面板,选中了客服按钮。  “你好!很高兴为您服务!自助服务请按0,人工服务请按1”。  杨成选择了“1”。  “你好!请问有什么问题嘛?”,那边传来了甜甜的妹子声音。  “我觉得你们的题目设计的很不错,但我有个小小的建议啊”。  “请讲”,客服妹子有耐心地问道。  “你看我一个人,穿着这样的服装,在这里默默地做题目,多枯燥啊”,杨成摇摆着腿。  “嗯”,客服妹子表示理解。  “能不能安排一个类似泰坦尼克号的双人解题环节,给俺试试啊”,杨成坏坏地笑了。  “嗯...”,妹子有些无语了,这人真是想象力丰富啊。  “好的,您的需求我们会尽可能考虑的”,妹子体现了良好的职业素质。  “请问您还有什么需要帮助的嘛?”  “没了,我就想和漂亮姐姐你聊聊天啊”,杨成脸上的笑意更浓了。  “祝您游戏愉快,再见,嘀,嘀”,通讯设备那边很快挂断了。  杨成有些不死心,再次选择了客服按钮。  “您拨打的客服热线正忙,请稍后再试”。  “您拨打的客服热线正忙,请稍后再试”。  “法克!”,杨成两手一摊,有些垂头丧气。  好在时间过得很快,一刻钟一下子就过去了。  杨成翻了翻小册子,很快发现了最后一道斐波那契系列的题目。  “这?”,杨成挠了挠头,这问题还真没有想过啊。  “让我想想,这该怎么算呢?”,他撕下一张纸,作为草稿,在上面演算起来。
  “依上所述,若N为负数项,作何解?”,这字迹感觉是一个固定的格式,开头是“依上所述”,中间是“若N为X项”,后面是“作何解?”。  杨CD有点鄙视这个出题的人了,你就不能来点新意嘛?  “负数项有意义嘛?”,他不禁道出心中的疑问。  然而事实是,它要你这么求,就必然有它的道理。  比如说f(-1),怎么求呢?  杨成把f(-1)写在了f(0)和f(1)旁边,他仔仔细细地一观察,很快发现了规律。  f(-1)不就是f(1)减去f(0)嘛,f(-2)不就是f(0)减去f(-1)嘛。  那么以此类推,将公式F(n)=F(n-1)+F(n-2)简单变换一下,就能得到F(n-2)=F(n)-F(n-1),这不就是负数项公式了吗?  杨成把负数项公式填到小册子上,把它刚一合上,眼前的3D成像菜单顿时烟花齐放,系统制作的掌声如雷,系统声音也及时地响起来。  “恭喜您成功完成了斐波那契之旅所有阶段的任务,您获得的积分明细如下”。  “初始积分2分”。  “分治法完成斐波那契数列求解奖励2分”。  “缓存提高算法效率奖励2分”。  “线性求解奖励2分”。  “两倍项公式求解奖励5分”。  “负数项求解奖励2分”。  “现今共积分15分,击败了全球10%的玩家,希望您再接再厉!”  “小贴士:获得更多积分将解锁更多功能和特权喔”。  杨成则是有些疲惫地抬了抬眼皮,这题目实在是太耗费脑力和体力了,自己都有些支撑不住了,有必要买个炒粉,喝点饮料,否则营养跟不上,怎么继续开车?老司机又不是铁打的。  “请问您要继续挑战下一个关卡嘛?”,系统声音提示道。  “不必了,直接ESC吧”,杨成摆了摆手。  “好的,祝您生活愉快,再见!”  眼前的世界骤然变黑,又瞬间恢复了视野。  杨成摘掉VR头盔,揉了揉眼镜。他这才发现网吧外面已经是一片漆黑了,时钟更是指向了10点,来上通宵的人越来越多。再不回去,估计寝室大门就关闭了,对于翻墙这问题,杨成还真不擅长。  在网吧楼下的小餐馆叫了一份炒粉打包,再买了几瓶饮料,杨成这才走回了寝室。  室友们都在自己的笔记本前,玩一款流行了十多年的单机格斗游戏——“毒奶粉”,杨成耸耸肩,大声嚷嚷道。  “这特么都二十年代了,你们还玩这08年出来的单机网游,太out了吧?”  室友们愤愤不平地比了个中指,然后自顾自地玩去了。  杨成自讨了个没趣,便在书架里翻了翻。  摸索了半天后,他拿出一本不太薄也不太厚的《C专家编程》,然后一个翻身上了上铺。  你说他挑这本经典书是为何?莫不是想拿来装X?  非也,非也,你说这大日光灯下,不拿本书遮脸挡光,能睡得着嘛?太厚了可压得生疼哩。  杨成把那《C专家编程》分开盖脸上,然后闭上了眼睛。  他实在是太累了,很快便进入了梦中。
  一大清早,天刚蒙蒙亮,杨成洗漱完毕,匆忙吃了点早餐,便来到了网吧。他心中隐隐地对下一个关卡有了些期待。  作为一名准程序员,新鲜事物对于他总是有吸引力的。反倒是那些室友,杨成感觉更像是20世纪的人,居然还玩横板格斗单机游戏,能不能稍微有点追求啊!  杨成很快戴上头盔,进入了角色。  “叮!”,熟悉的系统音响起来。  “亲爱的挑战者,准备前往下一个关卡了嘛?”  “OK,一切就绪”,杨成打出个胜利的手势。  “祝你好运!”,系统发出贴心的祝福,然后杨成的意识进入到了另一个空间。  乔塔帕特小镇的夜晚并不宁静,一群全副武装的士兵闯入了这里,他们戴着狼皮头盔,身穿铠甲,手里拿着盾牌与标枪,身上还配着短剑。这一切表面了他们的身份——罗马人。  “抓住每一个犹太人,记住,要活的!我要亲自把匕首捅进这群吸血鬼的心脏!”,为首的罗马将领发布了不容置疑的命令,士兵们则开始了四处追捕。  而小镇的另一边出口,一群身穿黑色斗篷的人趁着夜色,行色匆匆地逃窜着。  “不能再这样下去了”,有人说道。  “罗马人很快会追上我们,我们逃不掉的”。  “我可不想死在那些刽子手的屠刀下!不如自我了结!”,有人哀嚎道。  “我有个提议,咋们41个人排成一个圆圈,由第1个人开始报数,每报数到第3人这个人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。”  “大家赞同吗?”  大部分人举起了手臂,只有两个人除外。  一个自然是杨成,他是来完成任务的,可不是和这些煞笔纠缠的。  还有一个人,人们都称呼他为约瑟夫,据说是个历史学家或者说是数学家,不过这无关紧要,反正大伙都得玩完。  约瑟夫眨巴着眼睛,眼中闪烁不定,不知道在想些什么。  其他人不认得杨成,却认得约瑟夫。  “约瑟夫,你想做胆小鬼吗?没门!”,有人开始愤愤不平了。  “不不不”,约瑟夫摇摇头,“各位请先入场,我随后就来”。  杨成自然也是很识时务地点了点头,表示自己愿意顺从大家的意志。  约瑟夫瞟了杨成一眼,眼中多了一丝玩味,杨成则是低垂着头,一言不发。  事实上,他正在从全息菜单中调取编辑器面板,来一次死亡边缘的编程。  其他犹太人走到一处空地上,开始组成一道死亡的环形队列。  杨成依然面不改色,他正在一个接一个地编写代码。  “总人数41,报数间隔3,余留人数1”,杨成开始了初始化配置。  对于约瑟夫环问题,可以用循环列表来求解。只要剩余人数大于1个,那么就执行两个操作,一是报数,二是杀人。  “我说,那边那两个,还不过来是什么意思?”,站在圈中的人不耐烦了。  “不会要咋们亲自动手吧!”
  “好的”,约瑟夫半眯着眼睛,走向人们,他很快站定了位置。  杨成在虚拟编辑器上折腾了半天,最后一运行,好不容易求出了结果。这结果告诉他,第三十一个位置才是最安全,或者说是最后被干掉的。  他放眼一扫,发现第三十一位竟然被约瑟夫占了。  “这狡猾的老家伙!”,杨成不禁唾骂一声,原来约瑟夫早就算出了安全的位置,自己还在这儿傻乎乎的敲代码。  这也只能怪杨成自己,他用循环列表求解约瑟夫环,要模拟整个游戏的过程,不但程序写起来很麻烦,而且执行的效率还很低。如果只是要求出最后的胜利者序号,实施一点数学策略就可以做到。  不过来不及了,再这么下去杨成就会被暴怒而绝望的犹太人撕成碎片了。  于是他加快了思维速度,事实上,因为他初始化配置得当,只需要稍稍改变一下程序代码,把余留人数从1改成2,不就OK了?  程序再次运行,他很快得到了自己应该站的位置——16。  杨成站好了位置,这场死亡游戏便拉开了序幕。  “1”,第一个人吹响了死亡的号角。  “2”,第二个人暂避了风险,不过殊途同归。  “3”,报到这个数字的人,面色惨白,然后,他绝望地掏出一枝匕首,狠狠地划向自己的肌肤。  “噗通!”,鲜血染红了草地,死神继续挥舞着杀戮的镰刀。  “1...”  “2...”  刚才还站立的人,此时已经倒了个七七八八,而约瑟夫和杨成就好比暴风雨中的巨舰,继续乘风破浪,毫无顾忌。  有些人看出了点端倪,但在绝望中都只是徒劳的,就算是没自杀,那些粗鲁野蛮的罗马人会留活口吗?  “噗通!”,倒数第三位的人倒在了血泊中。  约瑟夫紧盯着眼前这个年轻人,他根本不像是犹太人,更像来自东方的旅人。  “我说,你怎么不报数了?”,约瑟夫目光中流露出一丝狡黠。  “约瑟夫先生,你很聪明”,对于这种智者,杨成毫不吝惜赞美之词。  “哦?你的意思我不明白”,约瑟夫还在装糊涂。  “我的目的和你是一样的!”,杨成平视约瑟夫,后者微微一愣。  “那就是活下去!”,说完,杨成转过身子,走进丛林深处。  “有趣的小子”,约瑟夫丢下这句话,也是一转身,逃了个无影无踪。  这时,东方的地平线上第一缕曙光开始出现,地面上横七竖八的尸体也消失不见了。  “叮!”,愉悦的系统声音响起来。  “恭喜玩家您完成了约瑟夫环任务”。  “先前积分15分”。  “循环列表求解约瑟夫环奖励2分”。  “当前积分17分,击败了全球11%的玩家”。  “才2分,太少了”,杨成玩了几把,也开阔了眼界。  “您现在准备开始下一个挑战嘛?”  杨成伸了伸懒腰。  “马上开始吧,大爷现在精力充沛,打几个怪升级没半点问题”。
  下一刻,杨成出现在了一个椭圆形的办公室中。  他西装笔挺,打着潇洒的领带,像极了某行业的成功人士或精英。不过,墙壁上挂着的一幅米字国旗表明了他现在所处的位置,他是以“约翰牛”的身份出现的。  打量着四周,杨成发现很多书籍和档案文件。  这厮到底是干嘛的?  不过,这疑问并不妨碍杨成第一时间发现办公桌上的一台电脑,他就如同发现了外星人一般惊喜。  “让我看看里面有些什么好东西”,杨成打开电脑,期望能从里面找到例如小电影般的东东。  电脑桌面上排列着很多图标,杨成甚至还发现了一款大型的单机游戏——“XX召唤”。  “真是酷毙了!”,他满怀期待地双击图标,期望在里面大杀四方。  毕竟完成任务是其次,享受生活才是NumberOne。  令人失望的是,电脑毫无反应。  “欧!我早该想到!”,杨成以手掩面。  这关卡中的虚拟物品,不重要的当然不会做得太真实,把宝贵的资源浪费在无关紧要的末节上,这是任何一个游戏运营所无法忍受的。  就在这时,办公室的门被敲响了,听起来有些急切。  “请进”,杨成一听就知道任务来了。  门被推开,走进来一位身穿警官制服的中年男子,他的眼神中充满了尊敬。  “你好,我是苏格兰场的警官麦克阿瑟。我们很早就听闻您在信息学方面的非凡造诣,恳请您协助我们调查一起案件”,警官麦克阿瑟开门见山地说道。  “喔,愿闻其详”,杨成很爽快地答应了。  “事情是这样的”。  “有一位关键的目击证人被谋杀了,他在临死前想说出凶手的姓名,但声音很微弱又断断续续,难以分辨。我们获取了他的录音,希望能在您这里得到帮助,看怎么找出凶手”。  “恩,你们可有嫌疑人名单?”  “有的,我们把行凶者锁定在了四个人之中,但又不确定到底哪个人才是真凶”,麦克阿瑟递过来一份文件,上面有四个英文名字。  “BernardDeltheil”  “PeterGone”  “PeterReeves”  “RolandScorsini”  “能先听听这段录音吗?”,杨成提出了要求。  光凭几个英文姓名,恐怕大侦探福尔摩斯也查不出个所以然来。  麦克阿瑟掏出一支录音笔,按下上面的按钮。  一个细若游丝的声音传了出来。  “p~t~g”,证人在最后时刻说了五个字母,其中还有2个字母无法分辨。  杨成当然不认为字符串的长度就意味着名字的长度,因为他有可能在说出凶手完整名字前就咽气了。  “好的,请稍等”,杨成几乎可以肯定是哪个人,但因为任务规则,他不能直接说出答案,而是得用程序员的方式来解决——敲代码。  他在电脑上打开一个编辑器,建立了一段脚本,然后开始编写代码。  对于任何的字符串匹配,是傻乎乎地用逻辑+循环,还是用强大而且简洁的正则表达式,我想大部分程序员都会倾向于后者。杨成对于这个问题很有自信,一小段正则验证便足矣。
  正则表达式的性能可能略低,但它的确很方便。对于这个凶手名称匹配来讲,它是不区分大小写的,所以得加“i”参数,以表示大小写不敏感。  杨成很轻易地完成了这次匹配,甚至用了不到100个字符,假如去掉空格,括号和分号,代码甚至会更短。  他深吸一口气,将代码和运行结果保存好。  “警官,我想我已经找出凶手了”,杨成脸上带着神秘的微笑。  “哦?是嘛!快讲给我听听!”,麦克阿瑟按捺不住地想赶快知道结果。  杨成拿出一支签字笔,在嫌犯名单的第二个“PeterGone”上面划了个圈圈,然后递给他。  “噢,真是太感谢您了!”,麦克阿瑟伸出手,紧紧地握了握杨成的手。  看着麦克阿瑟走出门外,杨成后仰在皮沙发上,舒服地把双手交叉放在后脑勺。  “叮!”,系统声音及时地响起来。  “恭喜玩家您完成了找出凶手的任务!”  “先前积分17分”。  “使用正则表达式匹配字符串奖励2分”。  “代码量在100个字符以内奖励1分”。  “当前积分20分,击败了全球13%的玩家”。  “不错”,杨成拍拍手,这个积分系统还考虑到了代码量问题,可以说比较完善。  “您要继续下面的挑战嘛?”  “不不不”,杨成摆摆手,“让我先在这舒适的办公室和皮沙发上,享受一段快乐的午休时间”。  “有什么需要帮忙的嘛?”,这系统展现出了人性化的一面。  “首先,你看我这身装扮,肯定不适合午睡”,杨成努努嘴。  “给我来一身睡觉三件套,睡衣,睡裤,还有睡帽”。  “我还需要一个超大的豪华型,欧式风格大床”。  “恒温的中央空调”。  “一个睡觉醒来可以看到加勒比海风景的海景房间”。  “嗯,就这些了”。  “亲爱的系统,你能办到嘛?”,杨成表示怀疑。  “能”,系统肯定地说道,“不过我得先读取一些配置,这得花上点时间”。  “很好!去吧,皮卡丘!”,杨成决定了以后不叫“系统”了,还是“皮卡丘”这个词儿比较带劲。  大概过了半分钟,杨成感觉自己身形一震,很快发生了空间移动。  温暖的海风吹拂在他的脸上,这里四季如春,拥有他刚才所想要的一切。  穿着睡衣,睡帽,睡裤,他呆呆地看着窗外的风光。  “我亏大了”,杨成却有些沮丧,“我应该还要求选50个加勒比的绝色佳丽来服侍我的”。  “喂,皮卡丘,能帮我搞到手嘛?”  系统那边却是毫无反应,似乎厌倦了杨成的贪得无厌。  “喂,皮卡丘?系统?”,杨成不死心。  “好吧”,杨成两手一摊,表示放弃,然后他两眼一闭,倒在了豪华大床上。  在游戏里面,时间会过得非常慢,尤其是当你处于休眠挂机状态的时候,有可能在游戏里睡了8个小时,而外面的世界才过去几十分钟。
  沟壑纵横的地面,黄泥土一眼望不到边际,一路上几乎看不到绿色的植被。  一辆小型的军用吉普车载着几个人往西北方向而去。  杨成坐在这上下颠簸的吉普车里面,不由得擦了把汗。  前一刻钟他还在加勒比海附近的港湾享受温暖海风的吹拂,观看美女们的比基尼沙滩排球表演,下一刻钟他就来到了干旱的黄土高坡,这不能不说是个杯具!  吉普车在行驶了上百公里后,进入了一个小山村。  而杨成此次的身份,是协助村民们度过缺水危机的砖家。  吉普车刚开进村口,车里的人便听到高音喇叭的广播声。  “亲爱的各位居民:我是村长,告诉大家一个消息,村子最近面临缺水的问题。县里的专家们已经过来指导了,帮助咋们共渡难关,希望大家保持镇定,克服困难!”  杨成等人刚下车很快被村长请到了一个小小的会场。  村长也不说客套话,毕竟困难当前,还是直奔主题的好。  “各位专家,我们村现在水窖里有一定的库存,但为了防患于未然,求助于大家。如果按照目前的消耗速度,我们还能够维持多久?”  杨成思索了片刻,这个消耗速度肯定是跟人的消耗量有关的,不同年龄层次的人,消耗的水量肯定不同。  “请问贵村每日人均生活用水量是多少呢?”  “人均我不会算,不同的年龄段生活用水量都不同:18岁以下的大概是1升每天,18到50岁以下的是2升每天,50岁及以上的是1.5升”,村长如实的回答道。  根据村长提供的信息,杨成调出编辑器面板,开始进行数据建模。  “0到18岁为未成年人,消耗量为1”。  “18到50岁为成年人,消耗量为2”。  “50以上岁数为中老年人,消耗量为1.5”。  “我还想知道所有村民的年龄信息”。  村长表示支持,很快拿出了一份名单,上面密密麻麻地记载了村民们的相关资料。  杨成思考了一下,根据年龄列表和上面的配置对象,就可以计算出每天的总消耗量。而用总储备量除以每天的总消耗量即可算出维持的天数。  依照这样的算法,他编写出了一个计算函数。  “您请放心,村子的水库存还能维持较长时间”,杨成笑着拍拍村长的肩膀。  村长也露出欣慰的微笑来。  “叮!”,系统铃声如期而至。  “恭喜您完成缺水危机处理任务!”  “先前积分20分”。  “使用循环求解题目奖励2分”。  “可配置式对象编程奖励2分”。  “当前积分24分,击败了全球15%的玩家,请您再接再厉!”  “您要继续下面的挑战嘛?”  “不不不,不急”,杨成一如既往的摆了摆手。  “您...您还有什么要求嘛”,系统这声音就好像一个受了委屈的小女孩儿。  “我说皮卡丘啊,你刚才玩了我一把啊,扫了俺的兴,这笔帐怎么算?”,杨成有些恶狠狠地对着系统说。
  在杨成的软磨硬泡,威逼利诱之下,“皮卡丘系统”终于作出决定,把杨成送到有海景的地方去看海。  古希腊亚历山大港,地中海气候给这里带来了丰沛的降水,这里尤其以盛产数学家和哲学家闻名,其中最富盛名的数学家自然包括丢番图。  海港边一座并不起眼的小茅屋,晚上睡在这里能听到海浪轻轻拍打礁石的声音,这里居住着年迈的丢番图和他的弟子。  “老师请用”,杨成用一个小碗装满煮沸的清水,递给一位老者。  老者年过八旬,唯一的儿子先他而去,所有的寄托就在这个弟子身上了。  丢番图喝了一小口清水,看着眼前这个弟子,眼中充满了慈爱。  “徒弟,为师今天要考考你,所学如何?”  “老师尽管吩咐”,杨成毕恭毕敬地侍立在一旁。  丢番图拿起一块松软的石膏,在墙壁上颤巍巍地一笔一划,写出一个方程式。  “已知x?-4y?=n,n为已知,则x,y作何解?”  杨成看到这方程的第一眼,就明白老师的意思了,他这是在考自己如何求出正整数解来。  毕竟这个时代,还停留在正有理数求解阶段。  “你不要急着做,先慢慢想一下,老师先出去走走”,说完,丢番图拄着木杖,缓缓地出了门。  这是一个著名的丢番图方程,或者说是不定方程。  当杨成看到这个方程的左边x?-4y?,他就有种感觉,它可以转化为(x-2y)*(x+2y),而且这必然是第一步。因为等式右边的常量N,它有可能是一个很大的数,如果用穷举法,效率是很低的。但可以尝试分解这个常量,把它因式分解成两项。  比方说,N=24,分解成两项有如下的可能:  [1,24],[2,12],[3,8],[4,6]  拿这些可能的项往式子上套,便可得四个方程组:  x-2y=1  x+2y=24  --------------  x-2y=2  x+2y=12  --------------  x-2y=3  x+2y=8  --------------  x-2y=4  x+2y=6  这样就转化成了求四个二元一次方程。  最后,再选取其中的正整数解即可。  杨成调出系统编辑器,把这个求解过程写成了一个通用的函数,无论N是什么,都可以通过这个函数来求解。  墙壁上,丢番图所写的那个方程式慢慢地被金色的线条所环绕。  “叮!”,系统声音响起来。  “恭喜您完成了丢番图方程求解任务!”  “先前积分24分”。  “因式分解求丢番图方程奖励2分”。  “当前积分26分,击败了全球16%的玩家,请您再接再厉!”  “成哥好棒喔!”,“皮卡丘系统”谄媚地说着肉麻的话,浑然不顾自己GM的身份。  “少拍哥哥马屁了”,杨成白了系统一眼。  “真想帮哥哥做点实事的话”,杨成话锋一转,面露狡黠之色。  “给我安排个希腊妹子晚上过来耍耍啊!”  “呃~”,皮卡丘一时语塞。  “成哥,要不要继续来玩玩啊?”,这人工智能系统犹如皮条客般怂恿着杨成。
  “成哥,要不要继续来玩玩啊?”,系统恬不知耻地聒噪道。  “玩你个球啊!”,杨成没好气地回了一句。  只听他话音刚落,整个人就立马穿越了时空。  下一秒钟,他出现在了一栋高楼中层的阳台上,身穿休闲T恤,人字拖。  此时天朗气清,端的是个好天气,适合在阳台上拿本杂志,坐着个摇椅,不急不慢地品尝咖啡。  杨成还站在那里YY休闲生活,耳边却传来一个清脆的童声。  “爸爸,快来瞅瞅我呀!”  杨成听到这声音,顿时很困惑,他四处张望,想找到声音的发源地。  “爸爸,快看上面啊!”  杨成循着声音把头伸出窗外,往天上那么一看,这才发现高处某层的阳台,一个淘气的小男孩正对着他做鬼脸。  “这特么是哪家的熊孩子啊?怎么到处认爸爸?”,杨成有些纳闷。  然后,只见那熊孩子从兜里掏出个深蓝色,亮晶晶的橡胶弹力球来。  “爸爸,你说我丢出这个球你能看见几次?”  杨成第一感觉是,被人叫爸爸才叫问题,这球被抛出能被看见几次算嘛问题?  莫不是在这个剧本里被“喜当爹”了?!  想到这里,杨成的心理阴影面积顿时翻了个倍。  楼上的小男孩在杨成脑洞大开的这会儿,却是抛出了弹力球。  那弹力球轨迹并非抛物线,而是一条直线下落,经过杨成这层时,他看见了弹力球第一次。  这时,他才恍然大悟,这个剧本的题目,就是求能看到弹力球的具体次数,既包括下落,又包括反弹。  这时,砸到地面反弹而起的球再次经过了阳台。  杨成心想,这弹力球一定有一个固定的反弹系数,这个系数越大,反弹的高度就越高,否则就越矮。  他很快有了一点思路:正常情况下,弹力球第一次下落时,我至少会看到一次。如果反弹起来的高度大于我当前阳台的高度,那么一上一下,我所看见的就要加上2次。  据此思路可以很快写出代码来,不过杨成还有一些疑问。  如果这个熊孩子站的地方,比我这现在的阳台还矮些,那我不是一次都看不到吗?  还有如果反弹系数小于等于0或者大于等于1,算不算异常值?  带着这些疑问,杨成补全了自己的代码,使其更加具有健壮性。  “爸爸,你做出来了嘛?”,熊孩子好奇地伸了伸舌头。  “你来我这一楼层,保证不打你小屁屁”,杨成很快提交了代码。  “叮!恭喜您完成了弹力球问题求解任务!”  “先前积分26分”。  “循环求解弹力球问题奖励2分”。  “异常值情况判断奖励1分”。  “当前积分29分,击败了全球18%的玩家,请您再接再厉!”  没等这中二的人工智能系统唧唧歪歪,杨成大喊一声。  “ESC,ESC,大爷要睡觉了!”  眼前灯光一暗,刚退出系统桌面,杨成甚至没有摘掉VR头盔,头一歪就打起了呼噜。
  一大清早,睡得迷迷糊糊的杨成揉了揉眼睛,他看了看时间,才早上七点钟。  要不要考虑先去吃碗面,喝点热气腾腾的豆浆什么的。  “算了”,他感觉自己还不饿,“先刷个题目来作为早餐吧”。  戴着头盔再次进入代码战争,短暂地失明过后,热辣辣的太阳炙烤在了杨成脸上。  “什么鬼?!”,杨成看清了自己这身打扮。  头上戴着墨西哥式的宽沿高顶毡帽,腰间挎着一把柯尔特,肩上扛着一把温彻斯特来复,身上则缠着密密麻麻的子弹带,牛仔裤皮上衣,身上穿着束袖紧身多袋牛仔服,一双饰有刺马钉的高筒皮套靴套在脚上,脖子上还围了一块色彩鲜艳夺目的印花大方巾。  最关键的地方是身下一匹风驰电掣般的快马,让人有些Hold不住啊!  “我该不是变成了兰博吧?!”,杨成觉得不够像,最起码没有史泰龙那样彪悍的肌肉。  再看了看这四周,贫瘠的荒漠,稀疏的灌木丛,杨成基本可以确定,自己正处在美国西部的某个地方,而自己这角色,估计就是英勇洒脱的西部牛仔了。  “我该怎么走?”,一人一马驻留在原地,茫然不知所措。  在这人迹罕至的西部荒野,糟糕的天气,匮乏的水源,节约点体力很重要,否则很可能死于非命!  更别提还有跃跃欲试的印第安人,极具攻击性的蝮蛇,响尾蛇!  “有点意思”,杨成嘴角叼着个牙签,从马上下来。  首先,他把那把沉甸甸的温彻斯特来复随手一丢。  这可不是装X的时候,他可不需要一把霰弹来打野猪!  然后,他摸了摸口兜,希望能找到一丝的线索。  果不其然,他很快翻出了一个小小的便笺,上面画着一些指示。  杨成定睛一看,这都是英文啊。  [“NORTH“,“SOUTH“,“SOUTH“,“EAST“,“WEST“,“NORTH“,“WEST“]  杨成第一眼看过去,就感觉有点不合理了。  假如这是方向的指示,“NORTH“和“SOUTH“,这一南一北,有意义吗?  还不如呆在原地,也不用做无用功啊!  杨成心里明白,这个关卡考察的就是怎样精简路线,以节约体力。  “NORTH“和“SOUTH“可以做抵消,“EAST“和“WEST“也可以做抵消。  那么刚才的路线指示经过抵消之后,就只剩下一个方向——“WEST”,直接往西边走!  但对于程序而言,怎么编写一个减少路线的函数呢?  第一步,建立方向的映射关系,哪些是相反的方向,比如东西,南北。  接着,遍历这些指示方向,遇到相反的方向,就移除,抵消。  这个过程将一直持续到,没有任何相反的方向为止。  此时剩下的指示就是经过精简后的最佳路线。  “叮!”,在杨成敲完代码后,系统音及时地响起来。  “恭喜您完成迷路的牛仔任务!”  “先前积分29分”。  “循环求解问题奖励2分”。  “对象映射关系建立奖励1分”。  “当前积分32分,击败了全球19%的玩家,请您再接再厉!”  “肚子好饿啊,ESC,成哥我先去吃点早餐”。
  一刻钟后,杨成左手端着杯豆浆,右手拿着几根油条,嘴巴里还咬着半截油条走进了网吧。  而他那些哥们,都拿着教科书,正走在上课的路上。  对于他来讲,听那些理论课实在是浪费时间,动手+实践才是王道!  至于考试,那不是考前复习几天,看看老师划的重点就能避免挂科的么?  于是,在享用完早餐后,杨成再次戴上了VR头盔,进入代码战争的世界。  “叮!温馨提示:尊敬的玩家,您本次挑战的关卡可能遇到危险,请在遇到困难后及时地后退,我们将用3D全息投影地图为您提供帮助”。  “系统生成螺旋矩阵迷宫,加载中,请稍候....”  下一分钟,杨成出现在了一个宽敞的走道中。  勉强适应周围昏暗的光线,杨成抬头看了看四周,两侧都是光滑的墙壁,四周静寂无声,恐怕连一根大头钉掉落在地上也能听到清脆的一响。  同时出现在他眼前的,还有一幅3D地图。地图上明确地标识了9个区域,而绿色的箭头作为标识他自身的位置,出现在1区。  这九个区域构成了一个基础型的九宫格,或者说3X3矩阵。  “1,2,3”  “4,5,6”  “7,8,9”  摆在杨成眼前的有3条道路,可以选择前往2区,5区或者4区。  “先去4区看看”,杨成选择了最下方的道路,一路大步迈进。  空气中弥漫着阴冷的气息,杨成感觉身体升起一股寒意,一种不祥的预感突然袭来。  他左顾右盼,也没发现啥危险的东西啊,于是他继续大步前进。  “咔嚓”,一种机械齿轮转动的声音传来,吸引了杨成的注意力。  “哗啦”,两侧的石壁不知啥时候扯开了两道口子。  “唰唰!”,两个砂钵大的铁拳从口子里钻出来,一左一右地朝杨成攻过来。  “唉呀!”,杨成一声惊呼,慌乱之中匆忙后跳,这厮身体素质还是不错的。  “嘭!”,两个铁拳狠狠地撞击在一起,发出沉闷的一响。  杨成拍拍胸脯,心有余悸地喘了喘气。  “这真是拿生命在开玩笑啊”,他不敢再试,只好原路返回,退回了1区。  端坐在冰冷的地面上,他开始思索解题方法。  刚才系统好像有提到关键的几个字——“螺旋矩阵”,这是个嘛玩意儿呢?  这是一种算法或者说是矩阵中的行进策略。  杨成在迷宫中有上下左右四种行走方式,但只有依据“螺旋式”策略才有可能走到出口,它具体体现在:  先向右走,如果遇到边界,或者右边的区域已经走过,那么就向下走,否则继续向右走。  当向下走,如果遇到边界,或者下边的区域已经走过,那么就向左走,否则继续向下走。  当向左走,如果遇到边界,或者左边的区域已经走过,那么就向上走,否则继续向左走。  当向上走,如果遇到边界,或者上边的区域已经走过,那么就向右走,否则继续向上走。  依照这种策略,走过的区域依次是“1,2,3,6,9,8,7,4,5”,最后到达终点站,正中间的5区。  不过,这个问题并不局限在九宫格或者说3X3型矩阵,也有可能是4X4,5X5甚至是NXN的矩阵。这就决定了不能硬编码,必须求出通用的解法。  “终于写完咯”,杨成敲完最后一行代码,擦了把汗。  “系统快告诉我,做的咋样?”  “叮!恭喜您完成了螺旋矩阵的任务”,系统兴奋地说道。  “当前积分35分,击败了全球21%的玩家,请您再接再厉!”  “告诉俺,下一站去哪里?”  “去非洲!”,系统肯定地说道。
  “大家好,这里是Discovery探索频道,我们这一期的节目来到了神奇的非洲,请注意这并不是《狂野周末》栏目,本期节目我们的目标是举世闻名的埃及金字塔”。  一架小型直升机搭载着节目制作组,从开罗市区前往郊区。  “伙计,这儿的风景真不错”,杨成戴着一副黑色边框的太阳眼镜,好奇地看着正前方隐约可见的金字塔群。  他目前的身份是以研究金字塔而闻名的考古学家,负责为广大的听众讲解。  “大家好,我是考古学家Alex.Yang,今天我们来到埃及金字塔,既不是为了进去一探究竟,也不是解答那些未解之谜,只是想谈谈金字塔的数学问题”。  “直升机请盘旋到金字塔正上方”,杨成发出了指示。  “摄像机镜头请对准正下方”。  “好了,现在我们正从上而下俯瞰整个金字塔”。  “大家说说,你们能看到多少个石块?”  “我听驾驶员说是36个,不过我得告诉他一个不幸的消息,我们能看到的石块数目是49”,杨成拿着话筒,继续说道。  “因为金字塔的基座是正方形的,而我们正处于塔尖的正上方,所以能看到的石块数是正方形边长乘以它自身,7X7等于49”。  “直升机请盘旋到金字塔的一侧”。  “金字塔有四个侧面,每个侧面都是完全相等的三角形,它们共同构成了一个四锥体”。  “那么现在呢?你们能看到多少个石块?”  “我听驾驶员说是16个,这次恭喜他,回答正确!”  “塔尖我们能看到1个石块,第二层我们可以看到3个石块,第三层可以看到5个,最底层是7,这一组数恰好构成了公差为2的等差数列”。  “我们用首项1,加上末项7,乘以项数4,再除以2,便能得到16的结果”。  “好了,刚才我们谈到了2个关于金字塔的数字问题,下面进入观众提问环节”。  “马上进行卫星连线”。  “嘀...嘀...”  “你好,我来自宾夕法尼亚州,正在看节目,我想请教您,这个金字塔一共由多少石块组成?”  “很棒的问题,感谢这位热心观众”,杨成顿了顿,清了清嗓子。  “事实上,我可以很明确地回答您,是84块”。  “金字塔最底层有7X7等于49块石头,倒数第二层为5X5等于25块,倒数第三层为3X3等于9块,顶层只有1块,相加就是84块”,杨成有条不紊地回答道。  “谢谢!恭喜您通过了金字塔问题的求解”,那现场观众的声音摇身一变,成了系统音。  “当前积分37分,击败了全球22%的玩家,请您再接再厉!”  “哇!”,杨成流露出难以置信的表情,“这就通过了你们的考验?”  “难道不用写写代码,做做测试什么的吗?”  “喜欢写你就写呗,反正题目是这样要求的呀”,系统又恢复了小萝莉的声音。  “有时我真怀疑你是不是个小萌妹子在逗我玩哟”,杨成挠了挠头。  “你猜”。
  “系统妹子儿,帮我订一张去韩国济州岛度假的机票,怎么样?”,杨成涎皮地说道。  “可以考虑嘛”,杨成不死心地继续追问。  “哼!”,系统音量瞬间调高了30%,蹦出这唯一的一个字儿。  “来咯,帮哥哥一个忙咯”。  “这可是你自找的,嘻嘻”。  “甚麽?你要干甚么?”,杨成感觉有一丝不妙。  “送你去韩国啊,如你所愿!”  杨成只感觉眼前一亮,各种景观在眼前一闪而过。  下一刻,他出现在了一个高档写字楼内部。  眼前一闪一闪的显示器,一行又一行的代码,墙壁上贴着的“毒奶粉”宣传画,一切的一切都表明,他现在正在这款全球最大的单机横版格斗游戏开发部门,充当被压榨的可怜码农。  “我说小杨啊”,这时一个身穿白色衬衫,戴着金边眼镜的中年男子走了过来。  “这是最新版本的角色选择界面,一定要加快进度,按时按质完成”,产品经理语重心长地对杨成说道。  “China那边版本要求得很紧,那就只好幸苦你一下了”,产品经理这厮果然老奸巨猾,说话都带这么多套路。  “唉”,杨成一脸苦逼地看着产品经理递过来的设计图。  说好的济州岛之旅呢?怎么变成写代码了?  常言道,自古深情留不住,总是套路得人心,还真没错!  不过苦逼归苦逼,该做的事儿还是得做。  杨成看了一眼选择界面,这才发现是一个2X6的表格,如下所示:  “男鬼剑士,男格斗家,男圣职者,男神枪手,男魔法师,男暗夜使者”  “女鬼剑士,女格斗家,女圣职者,女神枪手,女魔法师,女暗夜使者”  界面下面附加的规则有几条:  1.初始化的时候选择光标是(0,0)的位置,也就是“男鬼剑士”的位置  2.选择光标可以上下左右移动  3.选择光标可以水平方向和垂直方向循环移动,比如女鬼剑士,再往左边选择就是女暗夜使者,垂直方向女鬼剑士往下选择就是男鬼剑士  “小杨啊,怎么样?有难点没?”,产品经理笑眯眯地看着他。  “还行,我这就开始动手做咯”,杨成深吸一口气,感觉这任务还算轻松。  用一个二维数组表示这个2X6的表格,用两个指针变量,一个指向横坐标,一个指向纵坐标就OK了。  至于水平和垂直方向的循环移动,做简单的逻辑判断就可以了。  若当前横坐标为0,那么继续往左边就设置为5。  若当前横坐标为5,那么继续往右边就设置为0。  若当前纵坐标为0,那么继续往上边就设置为1。  若当前纵坐标为1,那么继续往下边就设置为0。  有了思路,杨成开始了夜以继日的奋战,一袋袋方便面和一根根泡面火腿被他消耗掉。  直到某一天,带着个熊猫眼,憔悴不堪的杨成终于听到了日思夜想的系统铃声。  “叮!恭喜您完成了横版格斗任务!”  “当前积分39分,击败了全球23%的玩家,请您再接再厉!”
  “我不管”,杨成整出个气呼呼的模样。  “你这次让我吃了这么大的亏,杀死了无数的脑细胞,你看怎么来补偿我?!”  系统沉默了2秒钟,似乎在思索。  “好吧,那就让你玩个趣味游戏,放松一下”。  系统话音刚落,杨成就出现在了一个大型的游乐场,熙熙攘攘的人群中间。  他瞬间感觉自己有点无所适从。  高大的摩天轮让他恐高,过山车会吓破他那脆弱的心脏,旋转木马是低龄儿童的最爱,碰碰船得先成为带孩子的家长。  “天哪,我该先玩玩啥子来打发下时光呢?”,杨成挠了挠头。  “这位小伙子,要不要来看看咋们这款打气球的游戏?”,不远处一个声音吸引了他的注意。  只见一个肥胖的,穿着汗衫,戴着眼镜的中年大叔冲他招了招手,他手上还攥着一叠零钱。  “反正闲着也是闲着”,杨成打定主意,走了过去。  他看到了一个小小的游戏机,屏幕上有一排排的气球。那气球有两种类型,正常的气球和感叹号模样的,感叹号气球会出现在若干个正常气球的两侧,而你的任务就是把感叹号们通通干掉。  那怎么干掉?用手指摁在感叹号气球上面,它自己就会炸掉。  “要不要玩几把?”,大叔笑眯眯地问他。  还有比这更弱智,更无聊的游戏吗?  杨成在心里嘀咕,不过他倒也能玩出点花样来。  “写个自动打气球倒也不错,打气球的接口已经有了,缺少的只是算法”。  “老板,多少钱玩一把?”,杨成摸了摸口袋。  “2块钱,随便你玩多久”,胖子大叔笑呵呵地说道。  杨成从口袋里掏出两张皱巴巴的1块钱递给老板,然后盯住了屏幕,观察气球的规律。  如果说,用大写字母“Q”代表正常的气球,而感叹号“!”代表要消灭的气球,那么就例如下面所示:  “!!!QQQQQQQ!!!”  这相当于一个简单的字符串过滤算法,可以用一个新的空字符串,先从左至右遍历气球字符串,遇到感叹号就跳过,遇到“Q”就用新空字符串作拼接,等到遍历结束,将新字符串放到原先的位置就OK了。  随随便便写了几行代码,杨成一提交,测试立马就通过了。  “没意思”,杨成丢下这句话,潇洒地转身离去了。  “小伙子,你不玩几把?!”,胖子大叔有些惊奇地看着他。  “啪啪啪啪!”,这时游戏机上的噼里啪啦声音吸引住了老板。  老板定睛一看,顿时眼睛都瞪直了。  只见那一排排气球刚刚出现,感叹号气球就自行爆炸了。  “呃~大神哪”,老板转过头看着杨成的背影,咂了咂舌头。  “叮!恭喜玩家您完成了打气球任务!”  “当前积分40分,击败了全球23%的玩家,请您再接再厉!”  “我说系统啊,能不能搞点有难度,有挑战性的题目给你成哥来做做啊”,杨成拿着个玩具海绵球,往上空一抛。
  “好”,系统有些气鼓鼓地说道,“那你就ready吧!”  “来来来”,杨成摆了个潇洒的pose,下一刻,他消失了。  这是一间宽敞的大学教室,里面稀稀疏疏地坐着一些研究生,而杨成则是坐在了第一排。  在他面前,有一位衣着考究的传统老教授,花白的胡子,看上去既有些严肃又显得德高望重。  此时此刻,老教授正对着黑板,用粉笔一笔一划,写了些晦涩难懂的东西。  这黑板上面有很多密密麻麻的符号,算术公式和计算机英文词汇,然而他们的标题却是一个单词——“Brainf**k”。  “这是什么玩意儿?”,杨成大脑中冒出了一百个问号。  这时,老教授转过身子,目光炯炯地看着大家。  “今年是1993年,我的研究成果是一项简单的,微型的计算机语言解释器。我暂时把它命名为Brainf**k,具体的设计工作已经完成了,编码实现作为大家的研究生阶段性课题”。  老教授扫视了一下众人,看他们有什么话要说。  “缪勒教授”,这时有人举起手来问道。  “您能谈谈它的基本原理嘛?”  “可以”,缪勒清了清嗓子。  “这种语言,他是基于一个简单的模型,提供了8种基础的指令。在底层,以字节为单位,以数组来存储,并提供了一个指向该数组的指针。至于输入输出,则是通过字节流的形式”。  “下面,我来谈谈指令集的具体设计”,缪勒摊开一份文件。  “’&’大于符号,它表示指针作加1运算”。  “’&’小于符号,它表示指针作减1运算”。  “’+’加号,它表示指针指向的字节的值加上1”。  “’-’减号,它表示指针指向的字节的值减去1”。  “’.’英文句号(小数点),它表示输出指针指向单元的ASCII码内容”。  “’,’逗号,它表示接收一个字节的输入,存储它的值到指针指向的单元”。  “’[‘左方括号,如果指针指向的单元值为零,向后跳转到对应的右方括号后面”。  “’]’右方括号,如果指针指向的单元值不为零,向前跳转到对应的左方括号前面”。  “大家有什么疑问吗,没有的话给你们两天时间”。  杨成此时却是面色惨白,恨不得挖个地洞钻进去。  这老教授到底说的是啥子玩意儿哟!  他大脑飞快地转动,在想个脱身之策。  突然他灵机一动,举起手来。  “教授,我肚子好疼啊!”,然后他面孔扭曲,捂着肚子飞也似的逃出了教室,此举看得缪勒也皱了皱眉头。  好不容易冲到了厕所,杨成一颗悬着的心才终于放松下来。  “叮!”,系统铃声及时地响了起来。  “很遗憾!玩家您离开指定区域,挑战失败了!”  “请您继续努力!”  “系统啊,你要不要这么坑人啊!”,杨成一脸的悲愤。  “嘿嘿,不给你点教训,让你不知天高地厚”,系统声音很是高兴。  “还刷不刷难题啊?”  “呃,还是饶了我吧”,杨成心有余悸地说道。
  “嘿嘿”,系统扑哧一笑,“你呀,有点小聪明,但还是得踏踏实实地学”。  杨成阴着个脸,就跟霜打的茄子一般。  “好咯”,杨成把自个乌黑浓密的头发顺手一拂动。  “系统老师,请问下一关卡是什么东东?”  “我给你安排了一位大师,你得虚心点啊小伙子”。  下一刻,杨成出现在了一个干干净净的化学实验室里面,周围摆满了各种仪器设备,以及叫都叫不出名字来的瓶瓶罐罐。  “小杨,你过来一下”,一个穿着白色工作服的中年男子喊住了他。  杨成脑海中立刻出现了中年男子的身份信息。  “苏青莲,科学院化学研究所研究员,负责化学元素方向的研究”。  “苏教授,您有什么事吗?”,杨成不敢有丝毫怠慢。  “小杨啊”,苏青莲递给他一份文件。  “你是软件工程专业毕业的,看能不能帮我把这些简单的,复杂的化学分子式,解析一下,算出一个分子中各种原子所占的数量比例来”。  “比方说,水分子'H2O',它的构成是2个氢原子,1个氧原子,那氢原子占了三分之二,氧原子占了三分之一”。  “再比如说,氢氧化镁'Mg(OH)2',由1个镁原子,2个氧原子,2个氢原子构成,各自的比例是多少,要算一下”。  “没问题,苏教授,我先看看”,杨成接过文件,从上往下仔仔细细地扫了一遍。  “Fe(NO3)2”  “K4[ON(SO3)2]2”  ......  杨成看到这些化学分子式一个比一个复杂,顿时有些头大。  不过好在他很快通过观察发现了一些规律:  这些分子式中,有可能出现很多成双成对的括号,包括圆的,方的,卷曲的,括号后面如果跟随了数字,那就表明,括号里的原子数量要乘以多少倍。例如“Fe(NO3)2”,它由一个铁原子,两个氮原子,六个氧原子组成。  这个题目的难点在于括号的处理上,有三种类型的括号,括号与括号之间有嵌套,有N对括号的情况。  所以首先第一步,就是统一括号,将大括号,中括号全部转化为小括号。  第二步正式开始解析,从左到右扫描分子式字符串,遇到小括号就将括号内的内容递归,统计原子数目。  第三步,用各种原子的数目除以总数,就可以求出各自所占的比例来。  有了正确的思路,写出代码不过是水到渠成的事情。  杨成只花了个多小时就搞定了编码任务,而更多的时间则花在了对分子式的测试上面。  几个小时后,苏青莲走过来。  “小杨,完成得怎么样了?有没有遇到难点?”  杨成转身递给他一张密密麻麻写满了各种比例的文件。  “做的不错”,苏青莲微笑着点点头。  “叮!恭喜您完成了化学分子式解析任务!”  “当前积分43分,击败了全球24%的玩家,请您再接再厉!”  “成成好棒!”,系统点了个赞。  “我先去找网吧老板,买一箱方便面,租个单间,这样就能度过一个月啦!”
  “老板,来一箱红烧牛肉面,来一个单间”,杨成伸手就是几张百元大钞。  网吧老板接过钱顿时喜笑颜开,赶紧把他引到一个单独的房间,这里甚至还有一个单独的小卫生间。  然后,方便面也很快就送到了。  “小伙子,还要什么尽管和我说”,临走前,网吧老板说道。  默默地摸了一把瘦了一圈的钱包,杨成进入了游戏。  曙光中学信息教学组办公室,教研组长正在给信息课教师们安排工作。  “小杨啊”,教研组长把个香烟屁股摁在了烟灰缸里。  “为了配合数学的教学进度,我们决定向初二的学生开一节关于勾股定理的信息课,具体的内容你来决定,要引导好学生们的兴趣”。  “好的”,杨成陷入思索中,开始回忆勾股定理的相关细节。  直角三角形有三条边,其中夹着直角的两条边称为直角边,而最长的那条边,称之为斜边。  直角三角形两条直角边的平方之和,等于斜边的平方。  用一个简单的例子来说明,就是勾三股四弦五,一直角边为三,另一直角边为四,则斜边为五。  这个勾股定理,很多人都会,但是怎么将它应用到计算机里面呢?  首先,这个直角三角形,它有两种边,直角边和斜边。  勾股定理阐述的,就是直角边和斜边之间的关系。  那么,已知两个直角边,可以求出斜边来,根据这个关系,可以建立一个函数原型:  functionhypotenuse(a,b)  这个函数,接收两个正整数参数,分别代表直角三角形两条直角边的长度,并且返回缺失的斜边长度。  换一个角度,已知一条直角边,一条斜边,就可以求出另一条直角边来。根据这个关系,还可以建立一个函数原型:  functionleg(c,a)  这个函数,也是接收两个正整数参数,第一个参数代表斜边的长度,第二个参数代表一条直角边的长度,返回值是另一条直角边的长度。  至于具体的实现,可以在课堂上给学生们现场演示,毕竟这是很容易的算法。  想好了这些,杨成点燃了一根香烟,一边吞云吐雾,一边和教研组长扯淡。  “组长,你觉得教英语课的吴老师长得怎么样?”,杨成一脸的涎皮。  “没看出,你小子平时挺正经”,教研组长狠狠地又摁了个香烟屁股。  “原来是闷骚型的”。  “你看我都二十出头了,哪能不急啊?都快急出白头发了”,杨成耸了耸肩。  “小杨啊,年轻人就应该踏踏实实地走路”,教研组长语重心长地说道。  “你给我再努把力,做满一千个题目,我给你介绍程序媛,注意了,是美女哦!”  “啊?!”,杨成嘴巴张大得能塞进一个大苹果。  “还要做一千个题目?饶了我吧,组长大哥!”  “滚!赶快结账去,别啰嗦!”,教研组长一甩衣袖,一脸的嫌弃。  “叮!恭喜您完成了勾股定理相关任务!”  “当前积分45分,击败了全球24%的玩家,请您再接再厉!”
  这一次的场景还是在校园里面,不过从曙光中学切换到了某科技大学。  “杨老师,明天是你第一次上我们班的计算机课,希望你能认真严肃点”,辅导员看了看杨成做的教案,不由得皱了皱眉头。  只见那上面写的东西,用辅导员的话讲,就像在写YY小说。  更气人的是,那空白处还画了一只白白胖胖,惟妙惟肖的可达鸭。  “好吧”,杨成摇摇头,“同学们就喜欢看这样的东西,我有什么办法?”  “咳咳”,辅导员一声干咳,被杨成的无耻雷到了。  “这次的教授内容是二分搜索算法,你打算怎么展示?”,辅导员赶紧切换了话题。  “二分搜索这东西,并不复杂,但要讲述的透彻,让学生一看就明白,还是得图形化展示”,杨成一副胸有成竹的模样。  “我给你看个东西”,杨成点开电脑上一个文件夹,只见里面有一个命名为二分搜索的HTML文件。  双击点开HTML文件,浏览器很快弹出了一个网页。  这页面上有一个名为“length”的文本框,旁边还有个小小的“create”按钮。  “length是数组的长度,设置好后,点击create按钮,会生成数组输入框”,杨成在文本框里面输入15,然后点击“create”按钮。  下方很快出现了15个空白输入框,分别对应有序列表的15个元素。  “在这些空白输入框,依次填入有序列表的元素”。  “10,11,12,16,18,23,29,33,48,54,57,68,77,84,98”。  杨成填好了这些数据,然后将光标切换到一个名为“target”的文本框。  “这个文本框表示我们要查找的是哪个数字”,杨成填上“23”,这是列表中已有的元素,因此将会执行一次命中查找。  杨成点击“save”按钮,将数据保存到页面。  “接着,点击show按钮,便会出现下面的查找过程面板”,杨成一点击按钮,下方果然出现了一个小小的面板。  面板标题是“对23的命中查找”,一共花了4次查找来找到目标。  第一次,left指针指向10,right指针指向98,mid指针指向33。  第二次,left指针指向10,right指针指向29,mid指针指向16。  第三次,left指针指向18,right指针指向29,mid指针指向23。  第四次,三个指针全部指向23,命中目标。  “不错!”,辅导员竖起大拇指,“那如果是未命中查找,会怎样呢?”  杨成将“target”文本框内的数字改成“50”,这是列表中没有的元素。  很快,面板标题切换为“对50的未命中查找”,也花了4次查找来确认目标。  第一次,left指针指向10,right指针指向98,mid指针指向33。  第二次,left指针指向48,right指针指向98,mid指针指向68。  第三次,left指针指向48,right指针指向57,mid指针指向54。  第四次,三个指针全部指向48,未命中目标。  “小杨啊,我要对你刮目相看了”,辅导员拍拍他的肩膀。  “结账吧”,杨成淡淡地说道,仿佛经历了风雨的洗礼。  “叮!恭喜您完成了二分搜索相关任务!”  “当前积分47分,击败了全球25%的玩家,请您再接再厉!”
  “系统MM,能不能别老把我丢学校里?”,杨成有些报怨地说道。  “就不能给哥铺设一条高富帅之路吗?”  “比方说,吃完晚饭,在100层楼高的大厦顶端打打高尔夫球,顺便看看城市的夜景,享受清凉夜风的吹拂,还有比这更惬意的事儿吗?”,杨成眼中饱含幽怨。  “好吧,如你所愿!”,系统冷冷地抛下这句话,然后杨成就消失了。  下一刻,他果真出现在了100层高楼的顶端,不过这里并没有高尔夫球场。  “杨工”,几个头戴安全帽,工程师模样的人不由分说围住了杨成,并塞给他一份图纸。  “我们计划建造一个N层楼的房子,它的设计蓝图是这样的:”  “最下面一层楼的体积是N的3次方,倒数第二层的体积是(N-1)的3次方,以此类推,顶层的体积是1的3次方。”  “现在问题来了,因为各种因素的考虑,总设计师决定把总体积限制在M。”  “那M体积有没有可能正好建好这栋房子?”  然后,众工程师看到了杨成沮丧的表情,也都是微微一愣。  “杨工,此事可马虎不得,得赶快做主,由你拍板哟”,一个年纪偏大些的工程师赶紧说道。  杨成这才稍微进入些角色,回过神来。  “M体积是硬指标吗?”  “对,请注意,不能多一点,也不能少一点。”  “您看看,能建成多少层的高楼?”,工程师们饱含期待的看着杨成。  杨成揉了揉发酸的太阳穴,思考了一小会儿。  既然给定了总体积M,那就从顶层开始,M依次减去每一层的体积。  顶层的体积为1的3次方等于1...  第二层体积为2的3次方等于8...  第三层体积为3的3次方等于27...  这个相减的过程,将会一直持续到M&=0。  如果正好等于0,那就说明正好可以建好房子,立即返回此时的层数。  而如果是负数,那就说明该体积M并不合适,得重新做规划。  “伙计们”,杨成旁顾四周。  “我帮你们建立一个函数模型,你们去推算下”,杨成掏出别在胸口的签字笔,在图纸上写了个函数。  findNb(M)  它接收总体积M,返回值是一个表示层数的整数。如果无法正好建好这栋房子,将返回-1作为标识。  “唉呀,杨工,太感谢您了”,众工程师簇拥着杨成,面有喜色。  “哼”,杨成却是气不打一处来,居然又被系统小妮子给耍了。  “真的想感谢哥,就给我安排一个到处是金银财宝的地方,让哥在钞票的海洋里,自由自在地畅泳一番才好哩!”,杨成联想到自己那干瘪得不成样的小钱包,顿时两只眼睛里冒出亮闪闪的美元符号来。  “叮!恭喜您完成了建房子相关任务!”  “当前积分49分,击败了全球26%的玩家,请您再接再厉!”  “您先前提的要求,我们会在下一个关卡尽量地满足”。  “嗯?”,杨成一听这话,顿时来了兴致。
  古希腊神话中的西西里岛,是一片被众神诅咒之地,终年被狂乱的风暴和天谴闪电环绕。然而,岛上却是一片祥和与宁静,遍地都是金光灿灿的金银财宝,足以让最淡定的冒险家失去理智。  当杨成抵达了这里后,却一点也没有在金币堆中打滚的兴致。  原因很简单,眼前有一头身高二十米的独眼巨人在守护这些宝藏。  “你想怎样...”,杨成颤抖着双手,盯着独眼巨人那犹如百年大树般粗壮的大木棒。  要不是知道这是在游戏中,一般人早就崩溃了。  “小不点”,巨人一只独眼紧紧地盯着杨成。  “我基克洛普斯绝不滥杀无辜,现在摆在你眼前的有两条道路”。  “要么回答众神之王宙斯的问题”。  “要么尝尝俺的破坏死光或大木槌”。  “你选哪一个?”  “那就...回答问题吧”,杨成不禁在心里面嘀咕,这有得选吗?  “很好”,独眼巨人从一个皮袋中掏出一些东西,小心翼翼地摆放在地上。  杨成定睛一看,发现是一个个半人高的水晶骰子,骰子上有一面刻有希腊文数字。  基克洛普斯将水晶骰子任意地排成一排。  “1,3,6,4,2,5”,现在骰子是这样排列的。  “小不点,问题是这样,我要你只交换相邻的骰子,控制骰子交换次数在6次以内,使得结果从1到6为增序”。  “或者说,我要得到”。  “1,2,3,4,5,6,这样的结果”  杨成思考了一下,根据题意,是要进行排序。  只能交换相邻的骰子,这就限制了算法类型,例如快速排序,选择排序这样的算法就行不通,但可以使用冒泡排序或者插入排序,最容易理解的当然还是冒泡。  好了,根据冒泡排序的原理,杨成开始第一次冒泡,这次的目的在于将最大的元素6“冒泡”到列表的最后面。  6和4,6和2,6和5作交换,这就用掉了3次。  现在的骰子是这样:  “1,3,4,2,5,6”  然后,第二趟冒泡,因为5,6已经在了正确的位置,所以只需要处理4。  将4和2作交换,得到:  “1,3,2,4,5,6”  好了,现在4,5,6都处在了正确的位置,那么,就只要将3和2交换位置,便可以得到正确的结果。  “1,2,3,4,5,6”  杨成气喘吁吁地搬完最后一个水晶骰子,累得一屁股坐在地面上。  “就这样了...呼呼”,杨成上气不接下气。  “5次交换就可以了”。  “哈哈”,独眼巨人发出一阵雷鸣般的笑声。  “没想到你这小不点还有点智慧”,基克洛普斯拍了拍手。  “那我就允许你在我的岛上玩几天!”  “让我先睡一觉”,杨成却是头一歪,倒在了沙滩上。  “叮!恭喜您完成了冒泡排序的相关任务!”  “当前积分51分,击败了全球26%的玩家,请您再接再厉!”,系统依然忠实地播报着。
  在神话中的西西里岛玩了几天,杨成带着个黑眼圈和独眼巨人基克洛普斯告别。  “我说系统妹子啊,能不能别这么折磨人?”,杨成脸上满是倦意。  “这种只能看看,摸一摸的金币银币,让我是睡也睡不好,整天绷着个神经盯着这些钱,却花不了一个子儿,你能明白这种煎熬嘛?”  “所以我才叫你不要每天做白日梦了,做点踏踏实实的事情才是应该的”,系统说道。  “这一次,还是回曙光中学,好好地教你的信息课吧!”  “什么?!又得回那中学?”,杨成心里面一万个不乐意,就差在地板上面打滚嚷嚷了。  曙光中学数学教学组办公室,教研组长正在向杨成请教问题。  “杨老师,现在是信息化时代了,校领导指示我们,要尽快跟上步伐,把教学工作和信息化成果结合起来,向学生们传授”。  “嗯”,杨成却是在漫不经心地听着,他的注意力更集中在手上的“打火机中的贵族”,思考着要不要先去抽一根“香烟中的王者”。  “杨老师”,数学教研组长苦着个脸,要不是校领导再三嘱咐,他可不想和这个比自己小了二十几岁的年轻人打交道呢,代沟太明显了。  “嗯,请讲”,杨成终于将注意力拉扯了回来。  “我将给初中生讲授简单的平面几何”,教研组长切入主题。  “比方说,给定一些坐标组成的列表,怎么判断它们是否在同一条直线上?”  “[[1,2],?[7,?4],?[22,?9]]”  “比方说这样的列表”。  “比较简单”,杨成挠了挠头。  “你首先在脑中浮想出一个平面,平面上面有一个直角坐标系”。  “把列表中的点一个个描在直角坐标系上面”。  “然后把点与点之间,用一条条线段连接在一起。”  “若直线上任意两点为(x1,y1)、(x2,y2)则直线斜率k=(y2-y1)/(x2-x1)。”  “如果这些线段的斜率都是一样的,那么它们肯定在同一条直线上!”  “而在程序中,我只要判断线段间的斜率,不一样就返回false。”  “根据上面的思路可以很快地写出代码来”。  “这个思路和我们数学方法是一样的啊”,教研组长挠了挠头,表示困惑。  “计算机的基础就是数学啊,或者说计算机原本只是用来研究数学的工具”,杨成如实地说道。  “小杨啊”,教研组长有些感慨。  “你说的东西都很浅显易懂,是我跟不上时代的潮流了哟”。  “您是一线教师,理论基础和授课经验都比我丰富得多,我要跟您学的地方还很多”,杨成不敢托大。  “叮!恭喜您完成了平面几何的相关任务!”  “当前积分53分,击败了全球27%的玩家,请您再接再厉!”  “系统妹子,我有个小小的愿望啊”,杨成呼唤道。  “直接说吧,只要不是太离谱的事情,都可以帮你办到”,系统妹子果然好脾气,温文尔雅不足以形容。
  “我的要求很简单,就是能喝上一罐82年份的雪碧”,杨成坏坏地笑了。  “好,满足你”,系统声音刚落,杨成就出现在了一个自动售货机前面。  漆黑的夜晚,明亮的路灯下面,自动售货机散发出微蓝色的光芒,里面一排排的货架盛放着一瓶瓶饮料。  杨成掏出几个硬币,先选中了雪碧下面的按钮,然后把硬币塞进投币口。  估摸着过了好几秒钟,从出货口并没有滚出来饮料,相反一个便笺飘落了下来。  借着微弱的灯光,杨成拿起便笺一看,上面写着几行小字。  “为自动售货机编写业务逻辑,已知规则如下:”  “1.售货机接收N种纸币或硬币,其中包括1元,5元,10元....”  “2.售货机最开始拥有各种类型钱币的数量都是一定的”。  “3.如果投入的钱币低于商品的价值,那么将钱币原封不动地退回”。  “4.如果投入的钱币等于商品的价值,那么无须找零”。  “5.如果投入了售货机不支持的钱币类型,原路返回无效的钱币”。  “6.如果要找零,尽可能从大额的纸币开始,比方说,要找25块钱,退回的结果是1张20块和1张5块,而不是2张10块的和1张5块”。  “7.如果售货机已有的钱币无法全额找零,那么尽可能接近地找零,但售货机是不能吃亏的!”  “这是个背包问题啊”,杨成挠了挠头。  最后一条描述说明了问题的性质。  背包问题可以描述为:给定一组物品,每种物品都有自己的价格,在限定的总价值内,我们如何选择,才能使得物品的总价格最高。  对于这一类问题,最好最高效的方法是动态规划求解,但使用递归蛮力求解,在小数据范围内也是可以的。  假如售货机内已有1元钱币3个,5元钱币5个,20元钱币1个。  我要购买3元的雪碧一瓶,并投进去了一张20元纸币,那么我得找零17元。  先看能用于找零的有什么样的钱币,20元的肯定排除,因为它大于17,售货机可不干亏本买卖!  然后,我们看3个1元钱币和5个5元钱币能不能产生找零17元的结果?  答案是肯定的,3个5元钱币和2个1元钱币就能够组成17。  这就是递归匹配的过程,不过具体实现上面,很多地方可以优化,用来提高效率。  “真的是好麻烦啊”,杨成擦了一把汗,在路灯的照耀下挥汗如雨。  早知道喝瓶雪碧解解渴这样的简单要求居然要先写个多小时的代码,还不如把自己送到海南喝点纯正的椰子汁。  “哟西,终于搞定了”,杨成不愧是有毅力的程序员。  “叮!恭喜您完成了自动售货机的相关任务!”  “当前积分55分,击败了全球27%的玩家,请您再接再厉!”  “咕噜噜”,从自动售货机的出货口滚落下来一瓶冰镇的雪碧,还有一张小小的便笺。  便笺上面写着一行娟秀的字迹——“请慢用^_^”
  “哇奥”,杨成拿起雪碧,拧开瓶盖。  “咕噜噜”,只见那冒着气泡的汽水被杨成喝进嘴里,他顿时感觉神清气爽,一种透心凉的畅快。  “真不错”,杨成抹了抹嘴,把空汽水瓶丢进了垃圾箱中。  “系统妹子,下一个任务是什么?”,杨成舒服地伸了伸懒腰。  “临时任务:系统导航功能出现异常,无法回溯到任务中心节点,请玩家先尝试自行修复”。  “嗯?”,杨成一听顿时来了精神。  对于程序员而言,未知的东西更能激发他们的求知欲。  “这个导航功能是基于怎样的原理?”,杨成迫不及待地问道。  “我们使用的是面包屑导航,它记录你的历史记录,可以帮你追溯到最初的任务中心节点”。  “你可以参考一下Windows操作系统文件管理器,它的地址栏就是一个面包屑导航。而它追溯的路径就像这样:”  “当前文件夹-&上一级文件夹-&当前盘符-&计算机”。  “它可以让用户了解当前所处的位置,以及当前节点在整个系统中的位置。”  “搜噶,那我该怎么着手呢?”,杨成挠了挠头。  “任务并不复杂,编写一个通用的面包屑导航方法:”  “1.接收一个URL,解析出域名,作为主页”。  “2.将绝对路径解析为多层目录结构依次展示”。  杨成听了系统的介绍,感觉这样的任务很独特,它比之前的任务更符合实际工作的需要。  好,那就开始动手做吧!  第一步,先检测这个URL是否以协议名开头,因为有些URL它是以域名开头的,当然也是合法的。如果检测出了协议,那就截取协议之后的内容。一般来说,协议后面紧跟的便是域名。所以,我们很轻易地便可以把域名提取出来,作为主页。  第二步,要解析绝对路径,可以先将域名之后的内容按斜杠进行分割,打散成若干个目录名,当然,这些目录名并非纯粹的我们想要的东西。比如说后面紧跟的参数或者锚记,我们不需要,所以就得截取我们想要的内容。  第三步,给这些目录名附加引用,让它们指向目标地址。  最后一步,就看系统指定在哪个地方展示啦。  “系统妹子,哥终于搞定了”,杨成轻声呼唤道。  “成成真不错,咋们的程序员们还在焦头烂额呢,你居然这么快就搞定了”。  “那还用讲,成哥我手写代码的速度可是超快的哟!”,杨成一甩头发,摆了个POSE。  “好好好,你的代码我们工作人员正在审核之中,感谢你的帮助”。  “作为小小的奖励,今晚自动售货机贩卖的所有东西,都对你免费开放”。  “哈哈!这次我要来一瓶82年份的可乐!”,杨成赶紧跑向那台自动售货机,在上面按了个不停。  “叮!恭喜您完成了面包屑导航的相关任务!”  “当前积分57分,击败了全球27%的玩家,请您再接再厉!”
  系统导航功能在杨成的修复下恢复了正常,他重新回溯到任务中心节点。  “系统正在分配任务,下一站,公元前58年。”  “位置,高卢,开启罗马共和国凯撒剧本......”  下一刻,杨成出现在了一座大帐之中,明晃晃的牛油烛照的内部无比地通亮。  “阿历克斯”,一位坐在帐中的中年男子轻声呼唤道,只见他身穿古罗马风格的甲胄,举手投足间流露出上位者的气场。  “尊敬的总督,您有何吩咐?”,杨成很快进入了角色。  这中年男子是历史上赫赫有名的罗马执政者,尤里乌斯凯撒,而他此时此刻的身份,是高卢总督。  “阿历克斯,我最信赖的助手”,凯撒示意他走过来,看看桌面上的羊皮卷。  “我时常给西塞罗先生写信,为了防止有人知晓咋们之间的秘密,于是,我发明了一种加密的方法,记载在这张羊皮卷上”。  杨成定睛一看,发现这种加密手段就是把明文中的每一个字母用它在字母表上位置后面的第三个字母代替,可以说是一种相当简单的加密变换。  “您有何疑问?”,杨成很有耐心地问道。  “我反复思索,觉得这样做还是不够保险,万一罗马共和国的敌人和那些我的政敌掌握了这些内容,他们一定会不择手段地来攻击我,毁谤我的荣誉!”  “所以,阿历克斯,希望你能帮帮我,改进下这个加密方式,让它更安全!”,凯撒眼中饱含期待。  “请您不要着急,我来琢磨一下”,杨成从凯撒手中接过了羊皮卷,拿在手上细细地端详起来。  牛油烛忠实地散发出光芒,点亮了杨成的思绪。  传统的凯撒加密,会根据字母表将文本中的所有字母移动固定的位数k。  而如果要对凯撒加密做个小小的改进,就必须打破这个常规。  在迭代加密的过程中,k不能是个常量,那样太容易被敌人猜出来。  因此,我们可以采用一个变量。  这个变量怎么变呢?  如果k被初始化为1,那么文本的第一个字母将在字母表中向右移动1位,第二个字母将向右移动2位,依此类推......  换句话说,k是按照1来递增的。  这样做,就增大了解密的难度。甚至于,我们可以把加密后的密文,分派给四个,五个,甚至更多的送信人,让他们依次送给西塞罗,密文合并后,再统一地进行解密。  杨成有了思路后,很快开始编写代码,这个关卡主要难点在于2个给拉丁字母进行左右移位的方法,作为加密和解密的帮助方法。  当杨成敲完了最后一行代码,他有些疲倦地抬起头。  眼前的凯撒大帝已经不见了,牛油烛也统统熄灭了。  高卢,这个历史上的法兰西,来自东方的第一缕曙光照进了大帐。  “叮!恭喜您完成了凯撒加密的相关任务!”  “当前积分59分,击败了全球28%的玩家,请您再接再厉!”
  做了一个通宵的凯撒加密,系统将他传送回了曙光中学。  杨成漫步在这空荡的校园里面,感觉自己的身体就像深秋的枯叶一般,随便一阵风就能让他摇摇欲坠。  “学生们都放寒假了?”  杨成随便走进一个教室,教室里空无一人,那一行行的课桌椅上,还摆放着整整齐齐的教科书。  此情此景,让杨成回忆起了高中那段艰苦奋斗的“光辉岁月”,没想到已经读大学了,还能有机会重温。  “先歇息一下”,杨成看着这一叠叠书山题海,顿时有了些主意。  他先坐在一张课椅上,在课桌的教科书中选了一本最厚实的,如同砖头般的家伙,先垫在了课桌上,把它一摊开,均匀地分成两边,作为软枕,剩下要做的便是呼呼大睡咯。  这是他时常在大学课堂玩的把戏,通常一节晦涩难懂的理论课很容易就打发了,虽说有时会让授课老师勃然大怒。  估摸着过了半个多小时,杨成被一股寒意给冷了醒来,毕竟这游戏环境是大冬天,要是现实中,估计就得发烧,咳嗽喽。  他迷迷糊糊地张开眼睛,发现四周依旧空荡荡的,眼前那原本擦得干干净净的黑板上似乎多了些东西。  杨成定睛一看,发现是一道数学题目:  给定f(0)=1,f(1)=2,与等式6*f(n-1)*f(n-2)-5*f(n-2)*f(n)+f(n)*f(n-1)=0,求f(n),n为正整数或0。  杨成擦了擦眼睛,开始了认真的思索。  上面那个等式,如果简单地变换一下,就可以得出求f(n)的公式:  f(n)=6*f(n-1)*f(n-2)/(5*f(n-2)-f(n-1))  已知了公式,那就好办了,这个公式类似于斐波那契数列的通项公式,既可以用分治法递归,也可以用循环线性求解。  杨成很快写好了代码,然后带入值运行。  当n=0,返回1。  当n=1,返回2。  当n=2,返回4。  当n=3,返回8。  ......  等等,这个结果有些蹊跷!杨成发现了一些不同寻常的规律。  1,2,4,8,16.....  这难道是偶然吗?每一项的结果居然是2的n次方!  换句话说,上面这个公式,可以直接简化成:  f(n)=Math.pow(2,n)  而pow函数的作用是求x的y次方。  杨成顿时无比震惊地看着这个序列,它做的伪装是如此的巧妙,以至于自己一开始就着了道。  “系统妹子”,杨成迫不及待地呼唤起来。  “怎么了?发现这个问题不同寻常了吧?”,系统甜甜的声音很快就出现了。  “嗯,这是一个隐藏得很深的序列,直指问题的核心所在”。  “我真是才疏学浅”,杨成不禁感叹道。  “继续努力吧,你这样下去一定会学有所成的!”,系统肯定地说道。  “嗯,路漫漫其修远兮,吾将上下而求索哇!”,杨成看着黑板上的题目出神。  “叮!恭喜您完成了伪装的序列相关任务!”  “当前积分61分,击败了全球28%的玩家,请您再接再厉!”
  “系统妹子,我想体验一把海底之旅,这个小小的愿望可以实现嘛?”  “嗯,可以的,不过你得做好准备,是深海哟”。  堪察加半岛东部的白令海,此海面积辽广,平均水深达到了上千米,历来是水下无声的战场。  海平面之上,寒风刺骨,顽强的海燕搏击着风浪,正

我要回帖

更多关于 虚拟按键大师 app 的文章

 

随机推荐