主题:[原创]抛砖引玉之二:螺旋矩阵--我写出了更好的方法
'完善程序,框架确定好了,不让从四周构造,必须从中心开始。哪怕网友有更简便、更通用的办法?请指导为盼!
CLS : INPUT n: DIM a(n, n): k = 0
IF n MOD 2 = 1 THEN k = k + 1: a(n \ 2 + 1, n \ 2 + 1) = k
FOR i = 1 TO n \ 2
FOR j = n \ 2 + i TO n \ 2 + 2 - i STEP -1
k = k + 1: a((n + 1) \ 2 + i, j) = k
NEXT j
FOR j = (n + 1) \ 2 + i TO n \ 2 + 2 - i STEP -1
k = k + 1: a(j, n \ 2 + 1 - i) = k
NEXT j
FOR j = n \ 2 + 1 - i TO n \ 2 + i
k = k + 1: a(n \ 2 + 1 - i, j) = k
NEXT j
IF k < n * n THEN
FOR j = n \ 2 + 1 - i TO (n + 1) \ 2 + i
k = k + 1: a(j, n \ 2 + 1 + i) = k
NEXT j
END IF
NEXT i
FOR i = 1 TO n
FOR j = 1 TO n
PRINT USING "###"; a(i, j);
NEXT j: PRINT
NEXT i
END
'新方法
CLS : INPUT n: DIM a(n, n): k = 0
FOR i = 1 TO (n + 1) \ 2
FOR j = n + 1 - i TO i STEP -1
k = k + 1: a(j, n + 1 - i) = n * n + 1 - k
NEXT j '下
FOR j = n - i TO i STEP -1
k = k + 1: a(i, j) = n * n + 1 - k
NEXT j '左
FOR j = i + 1 TO n + 1 - i
k = k + 1: a(j, i) = n * n + 1 - k
NEXT j '上
FOR j = i + 1 TO n - i
k = k + 1: a(n + 1 - i, j) = n * n + 1 - k
NEXT j
NEXT i
FOR i = 1 TO n
FOR j = 1 TO n
PRINT USING "###"; a(i, j);
NEXT j: PRINT
NEXT i
END
CLS : INPUT n: DIM a(n, n): k = 0
IF n MOD 2 = 1 THEN k = k + 1: a(n \ 2 + 1, n \ 2 + 1) = k
FOR i = 1 TO n \ 2
FOR j = n \ 2 + i TO n \ 2 + 2 - i STEP -1
k = k + 1: a((n + 1) \ 2 + i, j) = k
NEXT j
FOR j = (n + 1) \ 2 + i TO n \ 2 + 2 - i STEP -1
k = k + 1: a(j, n \ 2 + 1 - i) = k
NEXT j
FOR j = n \ 2 + 1 - i TO n \ 2 + i
k = k + 1: a(n \ 2 + 1 - i, j) = k
NEXT j
IF k < n * n THEN
FOR j = n \ 2 + 1 - i TO (n + 1) \ 2 + i
k = k + 1: a(j, n \ 2 + 1 + i) = k
NEXT j
END IF
NEXT i
FOR i = 1 TO n
FOR j = 1 TO n
PRINT USING "###"; a(i, j);
NEXT j: PRINT
NEXT i
END
'新方法
CLS : INPUT n: DIM a(n, n): k = 0
FOR i = 1 TO (n + 1) \ 2
FOR j = n + 1 - i TO i STEP -1
k = k + 1: a(j, n + 1 - i) = n * n + 1 - k
NEXT j '下
FOR j = n - i TO i STEP -1
k = k + 1: a(i, j) = n * n + 1 - k
NEXT j '左
FOR j = i + 1 TO n + 1 - i
k = k + 1: a(j, i) = n * n + 1 - k
NEXT j '上
FOR j = i + 1 TO n - i
k = k + 1: a(n + 1 - i, j) = n * n + 1 - k
NEXT j
NEXT i
FOR i = 1 TO n
FOR j = 1 TO n
PRINT USING "###"; a(i, j);
NEXT j: PRINT
NEXT i
END