回 帖 发 新 帖 刷新版面

主题:[原创]抛砖引玉之二:螺旋矩阵--我写出了更好的方法

'完善程序,框架确定好了,不让从四周构造,必须从中心开始。哪怕网友有更简便、更通用的办法?请指导为盼!

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

回复列表 (共11个回复)

11 楼

出题的人有问题

我来回复

您尚未登录,请登录后再回复。点此登录或注册