算法-螺旋队列
问题
21
20
19
18
17
看清以上数字排列的规律,设 1 点的坐标是 (0,0),x 方向向右为正,y 方向向下为正。例如,7 的坐标为 (-1,-1),2 的坐标为 (0,1),3 的坐标为 (1,1)。编程实现输入任意一点坐标 (x,y),输出所对应的数字。
分析
以(0,0) 即 数字 1 为中心,螺旋的形式如图
圆心为第0圈,往外为第1圈,再往外为第2圈,依次类推
每一圈数字的右上角的点p, 它的数值是可以推导出来的
n = 0 -> p = 1 即 (2 * 0 + 1) ^ 2
n = 1 -> p = 9 即 (2 * 1 + 1) ^ 2
n = 2 -> p = 25 即 (2 * 2 + 1) ^ 2
所以,第n圈,右上角的数值为 p = (2n+1)^2,故而,
p1 = p – n
p2 = p – 3n
p3 = p – 5n
p4 = p – 7n
知道了以上点的数值之后,就可以计算任意一点(x,y)处的数值了。
代码
作者:JarvisChu
原文链接:算法-螺旋队列
版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0