蜂窝上量距离
最早是从《电脑报》上知道这个问题的,题目的大意是:将一个蜂窝编上号:以一个孔为中心,编为1号;再设立六个方向,并按顺时针方向一层一层地编号。
g h i
f 6 7 j
e 5 1 2 8
d 4 3 9
c b a
其中a~j分别代表10~19。
以“1-2-8”为第一个方向;“1-3-10”(“1-3-a”)为第二个方向;……以“1-7-i”(“1-7-18”)为第六个方向。
1为中心。以“1”为第一层,“2-3-4-5-6-7”为第二层,“8-9-10-11-12-13-14-15-16-17-18-19”为第三层……。
编号之后,给你两个号码,计算出它们之间的距离(一格一格走的距离)。例如,1到2 的距离是1;1到16(g)的距离是2;1到15(f)的距离是2;14(e)到8的距离是4;14(e)到3 的距离是3……。
《电脑报》上给出了一个解法,但是我认为那个解法较为复杂,我也没有每一个语句地去分析。在大学的军训期间,我找到了一个更好的方法。
我认为,蜂窝是一个平面的图形,应该可以用二维的坐标系来表示。从下面的图形中,可以看出来,其实用错位的方格正好可以表示方位:
■■■
■67■
■512■
■43■
■■■
→
ghi
f67j
e5128
d439
cba
●●●
●●●●
●●●●●
●●●●
●●●
事实上,可以取“1-2-8”和“1-6-16”(“1-6-g”)两个方向为正方向,即x,y两个方向。于是,“1-7-18”(“1-7-i”)可以由x,y两个方向。
以1为中心,建立平面坐标系,取“1-2-8”方向为x的正方向,取“1-6-16”为y方向。可知“1”的坐标为(0,0),“2”的坐标为(1,0),“6”的坐标为(0,1),“7”的坐标为(1,1),“3”的坐标为(0,-1)……。
知道各个孔的坐标之后,就可以求出其到“1”的距离。对于在坐标轴上的、以及第一、第三象限的孔,其到“1”的距离就是max{abs(x),abs(y)};而位于第二和第四象限的孔,其距离就是 abs(x)+abs(y)。可见,如果是某点到“1”的距离,是非常容易求的。
由于平面坐标具有相对性,所以,可以将任意的两个孔的坐标转化为“1”与某个其它的孔的距离。只需将两孔的坐标相减,再把得到的结果当成以个新的坐标,求出它到“1”的距离,即是原来两孔的距离。