问题
下面是一个从1开始的、5×5大小的、顺时针数字螺旋:
21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13
可以验证得出,对角线上的数字的和为101。
那么,以同样的方式组成的1001×1001大小的数字螺旋的对角线的值的和是多少?
* 传送门
分析
显然,这个数字螺旋的形状总是奇数x奇数
的,因为从1开始、要对称。每圈都只会贡献4个角的数值。当这个数字螺旋的大小为d,d是大于1的奇数:
- 最外一圈的右上角的值为
d*d
; - 最外一圈的左上角的值为
d*d-(d-1)
; - 最外一圈的左下角的值为
d*d-(d-1)-(d-1)=d*d-2*(d-1)
; - 最外一圈的右下角的值为
d*d-(d-1)-(d-1)-(d-1)=d*d-3*(d-1)
; - 最外一圈的四个角的值之和为
4*d*d-6*(d-1)
。
所以,按奇数过程一层一层求和就可以了。piece of cake~
答案
// answer: using formula
const start = Date.now()
let result = 1 // 先将中心的1加上
for (let d = 3; d <= 1001; d+=2)
result += 4*d*d-6*(d-1)
alert(result + ', ' + (Date.now() - start) + 'ms')
打赏作者