登陆注册
77391200000045

第45章 算法之美

「哎呀,别卖关子了,赶紧说吧!」

看着老爹一幅悠然闲适的样子我牙根儿都痒痒,如果不是害怕遭雷劈可能早就用鞋底招呼过去了。

「好吧好吧,那我就说吧。其实要通过键值来避过switch目前我能够想到的有两种方法,其中一种比较取巧,另一种就是正儿八经的通过计算得出来。

刚刚你们也说了,如果是对灰太狼进行上下移动,实质上是在对行数x进行加减,左右移动,是对列数y做加减,那我们定义一个二维数组,把要加减的量放在数组里面,然后通过键值把数组取出来就好了。

向上移动,x-1,也就是x+(-1),y+0;

向下移动,x+1,y+0;

向左移动,x+0,y-1,也就是y+(-1);

向右移动,x+0,y+1;

键值的排列是左37,上38,右39,下40,如果我们对它们进行减运算,得到的结果是左0,上1,右2,下3,正好可以作为数组的下标。

于是就可以声明一个偏移量数组:

int offset[4][2]={{0,-1},{-1,0},{0,1},{1,0}};

我们知道了灰太狼当前的位置,也可以通过键值获取位置的改变量,那么下一个位置、下下个位置自然就能够确定了。假设我们把移动这部分的逻辑定义成一个move函数,那么实现逻辑大概如下:

int move(int keyCode)

{

int index = keyCode - 37;

int x1 =灰太狼当前位置x+ offset[index][0];

int y1 =灰太狼当前位置y+ offset[index][1];

int x2 =灰太狼当前位置x+ offset[index][0]* 2;

int y2 =灰太狼当前位置y+ offset[index][1]* 2;

/*移动判断逻辑*/

}

x1,y1和x2,y2就是当前移动方向的下个位置,下下个位置的坐标,有了它们,实现功能应该就不是什么难事儿了吧?」

「这样……都行?」

我和小弦子都被老爹这波操作秀到了,真的特别让人无语。就好像你想尽一切办法,使尽浑身解数都没有将一块大石头给搬起来,然而在这个时候某个人拿了几个滑轮和绳子,不费吹灰之力就大石头给搬起来了。

不仅是我和小弦子有这种感觉,就连之前陷入沉思的六叔叔也是好一阵无语,如果一定要用一个词语来形容我们此时此刻的心情,大概还是只有「卧槽」这两个字了。

但不得不是说的是,老爹的这种做法让人挑不出来任何的毛病来,而且简单易懂,实现起来也极为容易。

很显然,这并不是我,小弦子和六叔叔想要看到的结果,因为这和我们想象中的算法相差太大了!

算法难道不应该是经过一系列精密的计算后,最终得到想要的结果么?

「哈哈,你们别这样看着我,我之前声明过的,这种方法比较取巧。而且作为一个合格的程序员,就是要用最简洁的代码实现最复杂的功能,因为简洁同时也意味着效率高。」

老爹似乎是看穿了我们三个人的心思。好吧,我承认他说得很有道理的样子,但是依然没有办法让我平静的接受,毕竟之前我为了考虑键值和位置移动偏移量的关系扣了那么久的头皮,让我如何能够接受这种毫无技术含量的答案?

小弦子和六叔叔没有说话,不过我猜他们和我想的应该是差不多。

「行了行了,那我就说说第二种方法吧,如果这种方法依然不能让你们满意,我就没有办法了!」

老爹被我们三人看得有些头皮发麻,最终还是屈服了。

「首先,在上下方向上,上下的键值分别是38和40,这个时候通过计算得到的结果是:x的偏移量是±1,y的偏移量为0。x的偏移比较容易,用键值减去39就好了。

同理,在左右方向上,左右的键值分别是37和39,这个时候通过计算得到的结果是:x的偏移量为0,y的偏移量是±1。y的偏移比较容易,用键值减去38就好了。

换句话说,键值为38和40时,x的偏移量是±1,为37和39,x的偏移量是0。同样,键值为38和40时,y的偏移量是0,为37和39,y的偏移量是±1。

那么,你们能不能告诉我,38、40和37、39这两组数有什么区别么?」

老爹在一阵分析后,然后抛出了这个问题,如果没有什么意外的话,这个问题的答案就是破解一切问题的关键所在。

「嗯~,都是数字,能有什么区别?数值不同?」

我想了半天,也没能想出这其中有什么区别。

「难道是奇偶?」

就在这时,从上课开始到现在都没有说话的六叔叔居然发声的!

「对啊,就是奇偶!」

同时六叔叔的这句话也点醒了我和小弦子。

「没错,它们最大的不同就是奇偶性不同!我们的算法也正是要借助这一点,使用奇偶来完成一个统一的计算过程。」

老爹坦言道。

有了老爹提供的思路,我脑袋飞速运转了起来,开始挖掘移动偏移量和奇偶性的关系。可是即便如此,我依然没有能够想出这其中的联系所在,只能败下阵来,等待老爹的最终答案。

「好吧,我还是直接公布答案吧,不然你们两个小家伙怕是要被逼疯了。

首先,我们依然对所有的键值进行减37处理,然后得到的结果就是:上1,下3,左0,右2。

注意,这个时候奇偶性已经发生了改变。而且问题也已经变成了通过1、3得到x偏移±1,y偏移量0;0、2得到x偏移0,y偏移±1。

1和3要得到±1,只需要减去2,但是0和2减去2变成了-2和0,怎么办?如果这个时候我们再对减去2的结果对2取余呢?

也就是说,x的偏移量=(键值-37-2)%2,即x的偏移量=(键值-39)%2。」

「对了!可以等到正确的结果!」

我和小弦子惊呼道。

「好了,按照相同的分析办法,你们自己看看y的偏移量应该如何计算。」

y的偏移量正好与x的相反,通过1、3得到y偏移量0;0、2得到 y偏移±1。

0和2要得到±1,只需要减去1就可以了,1和3减去1后是0和2,依然对2取余就可以得到0,因此y的偏移量=(键值-37-1)%2,即y的偏移量=(键值-38)%2!

同类推荐
  • 我和我的爱而不得

    我和我的爱而不得

    那些说女追男隔层纱的都是假的!假的!假的!我和我身边的那些爱而不得,与你相似,又不尽然相同。
  • 旁观者轻

    旁观者轻

    芸芸众生,人生百态,作为一个旁观者,观察着不一样的生活,体验着不一样的人生,有过感同身受,也有过不一样的遗憾,成长路上的不同滋味需要自己慢慢体验。
  • 丢失商店

    丢失商店

    一生路茫茫,你有没有丢失过什么?比如勇气,比如自信,比如真诚都可来丢失商店找回丢失商店,望您笑纳没耳
  • 妻子的秘密

    妻子的秘密

    美丽妻子的身上,有着太多秘密……报社编辑出身的乐正弘意外发现了妻子不忠的秘密,他才意识到,自己根本不了解妻子,不了解这个首席美女记者。来源不明的巨额存款,奢华别墅的钥匙,上流社会顶级富豪的交际圈,暧昧不明的男女关系。妻子究竟为何一步步陷入深渊?乐正弘决心要弄清这一切!
  • 想于思

    想于思

    有时候一个人只是觉得孤单,并不是真的孤单,但热闹过后,注定还是冷清。
热门推荐
  • 逍遥皇帝打江山

    逍遥皇帝打江山

    小镇的平凡少年踏入京城,做最逍遥的皇帝,娶最美的皇后。已有三百万字精品小说《明朝小侯爷》,坑品有保证,欢迎入坑。新书《诸天最妖孽》欢迎大家品鉴。
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 医后凤华

    医后凤华

    【男强女强,腹黑,学院】安若玥自打来到这片大陆以后,除了一开始的父母失踪稍不称心以外,简直跟开了外挂一样,事事顺心,闹得神之谷天翻地覆,是谷中人尽皆知的小魔女。一朝出谷,不祸害祸害外面的人,怎么对得起她小魔女的称号?于是,一路扮猪吃虎,仗着自己软萌的外表,完美避开了怀疑,只被以为是天然黑。可是,外挂也是有时限的。不说这莫名其妙的血脉害得她不得不自降实力,还时时刻刻被威胁着性命了……也不说父母失踪牵扯出的事了,好歹能确定他们是安全的。可小哥哥你怎么不按套路出牌啊?你到底从哪里看出我腹黑了?我改还不行吗?好吧,同类人的嗅觉,再怎么改也没用,只不过人家是闷骚型的。
  • 民国危情之苗女复仇

    民国危情之苗女复仇

    故事发生在清末年间,一个西北边陲小傎。一个经营茶庄,手段老辣的富商。一个遭人陷害,行事光明磊落的常威镖局。一个名利趋心,一心想夺得宝藏的苗家阿达氏。三大家族,恩怨情仇,名利斗争,相爱相杀。蒙从小受养父宠爱,刚新婚不久和夫君押了一趟钾。自此改变了他们的命运。也正是这趟镖,养父渐渐露出了不为人知的一面。原来她一直被养父利用,竟然还要求监视自己的夫君。**她,为了救夫君,竟然委身匪盗,后来才发现,原来是大家误会她了。经历变故,夫君变了,酗酒,自甘堕落,最后竟然抛弃了她。她成了无家可归可怜的女人,一路流浪。殊不知,养父见到奄奄一息的她时,却为了宝藏,几乎快掐死她。逼她改嫁,这还有天理?面对百般羞辱,她可偷生,但不能苟且。她选择了跳崖自杀。最后,她竟然嫁了曾经羞辱她的人,并怀了他的孩子。开棺验尸、查内情、慰亡灵、让死人开口说话——这是本该是仵作该干的事。他一个弱女子却干了。揭开这一切,她才发现自己竟然怀了仇人的孩子。最后,她是不是连孩子的父亲也要除掉吗?她会这样做吗?她成长了,经历了,仿佛什么都淡了。虽然夫君疼着她,但总感觉生命缺少了什么?她深爱的人却不是共枕同眠的人,那难道不遗憾吗?**光绪年间,朝野昏聩,倭寇犯边。樱花谷下清水河,王子楔地牢被关十年,重见天日,寻杀父元凶,刺西北军阀头子!男子行事成迷,弱女子身手奇诡,杀父元凶究竟何人?剿匪途中内奸暗藏,望乡峡门山地宫机关深诡,议和使节半路身亡,京都惊现真假皇帝……这二人身影,若非十年前的夫妻?是谁引得她下一着乱世的棋,是谁以刀刃为弦奏一首盛世的曲?自边关至京都,自民间至朝堂,且看一出扑朔迷离的大戏,且听一曲民国危情。
  • 大宇无情道

    大宇无情道

    人类文明进步后终于发现其他文明。奈何万族争鸣,人族太过低端。在这无情宇宙,你可愿为人族尽绵薄之力?
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 余生不负晨光

    余生不负晨光

    “怎么,想用死来吓我吗?有本事你就跳下去!”一袭婚纱的傅薏便绝望的跳了下去...再见时,她已身显孕肚,和别的男人十指相扣着,笑颜如花,眸光温柔...也已不再是傅薏!【原来那年,我已遇见最好的晨光!】
  • 末世之莫忘

    末世之莫忘

    带着系统浪迹宇宙.......第一世:木易霜一心只想报仇,当所有仇人都玩完了,以为自己大仇得报,没想到漏了仇家的私生子,被华丽的撞死了第二世:木易霜一心只想修炼成神,为所欲为,找不到机缘,只能让系统撕裂空间去别的位面找机缘第三世:系统偏离原本的轨道,进到一个丧尸世界,“统儿你粗来,这些丧尸好丑啊啊啊,好影响我的食欲,统儿,我要捏爆你狗头”……“宿主,淡定淡定,你想想能量,等我够能量了,我再带你去浪啊”
  • 总裁你家又被炸了

    总裁你家又被炸了

    少爷,夫人把你心爱的衣服剪了。少爷,夫人又把你的文件撕了。少爷,夫人又去打架了。没事,她开心就好
  • 女人一生最重要的15个决定

    女人一生最重要的15个决定

    女人的一生犹如花朵的生命,短暂的花期仅是全部生命过程中一个小小的环节,每个女人都必将经历辉煌与失落。女人的一生犹如花朵的生命,短暂的花期仅是全部生命过程中一个小小的环节,每个女人都必将经历辉煌与失落。