首页>程序员的养成 > 第四十四章 算法之美

第四十四章 算法之美(第2页)

目录

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

「首先,在上下方向上,上下的键值分别是3和40,这个时候通过计算得到的结果是:x的偏移量是±1,y的偏移量为0。

x的偏移比较容易,用键值减去39就好了。

同理,在左右方向上,左右的键值分别是37和39,这个时候通过计算得到的结果是:x的偏移量为0,y的偏移量是±1。

y的偏移比较容易,用键值减去3就好了。

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

同样,键值为3和40时,y的偏移量是0,为37和39,y的偏移量是±1。

那么,你们能不能告诉我,3、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的偏移量=(键值-3)%2!

本章未完,点击下一页继续阅读



返回顶部