回 帖 发 新 帖 刷新版面

主题:有关"自然数转圈"的问题

题目是这样的

打印N*N的一个数字方阵.比如N=4,那么图形就是
1  2 11 10
2 12 16  9
3 14 15  8
4  5  6  7
应该如何用数组编写程序?[em4]

回复列表 (共9个回复)

沙发

以前的贴子里有

板凳

题目好像有问题
本题应该是一个四角螺旋
1  12  11 10
2  13  16  9
3  14  15  8
4   5  6   7 

3 楼

CLS
INPUT n
DIM a(n, n): x = 1: y = 1: s = 0
k = n
DO
  DO WHILE a(x, y) = 0
     s = s + 1
     a(x, y) = s
     x = x + 1
     IF x > k THEN EXIT DO
  LOOP
  x = x - 1: y = y + 1
  DO WHILE a(x, y) = 0
     s = s + 1
     a(x, y) = s
     y = y + 1
     IF y > k THEN EXIT DO
  LOOP
  y = y - 1: x = x - 1
  DO WHILE a(x, y) = 0
     s = s + 1
     a(x, y) = s
     x = x - 1
     IF x < 1 THEN EXIT DO
  LOOP
  x = x + 1: y = y - 1
  DO WHILE a(x, y) = 0
     s = s + 1
     a(x, y) = s
     y = y - 1
     IF y < 1 THEN EXIT DO
  LOOP
  x = x + 1: y = y + 1: k = k - 1
LOOP UNTIL s = n * n
FOR i = 1 TO n: FOR j = 1 TO n
    PRINT USING "####"; a(i, j);
NEXT j: PRINT : NEXT i: END

4 楼

CLS
INPUT n
DIM a(n, n): x = 1: y = 1: s = 0
k = n
DO
  DO WHILE a(x, y) = 0
     s = s + 1
     a(x, y) = s
     x = x + 1
     IF x > k THEN EXIT DO
  LOOP
  x = x - 1: y = y + 1
  DO WHILE a(x, y) = 0
     s = s + 1
     a(x, y) = s
     y = y + 1
     IF y > k THEN EXIT DO
  LOOP
  y = y - 1: x = x - 1
  DO WHILE a(x, y) = 0
     s = s + 1
     a(x, y) = s
     x = x - 1
     IF x < 1 THEN EXIT DO
  LOOP
  x = x + 1: y = y - 1
  DO WHILE a(x, y) = 0
     s = s + 1
     a(x, y) = s
     y = y - 1
     IF y < 1 THEN EXIT DO
  LOOP
  x = x + 1: y = y + 1: k = k - 1
LOOP UNTIL s = n * n
FOR i = 1 TO n: FOR j = 1 TO n
    PRINT USING "####"; a(i, j);
NEXT j: PRINT : NEXT i: END

5 楼

楼上的,你模仿我的程序.

6 楼

要是由中心向外转怎么写呢?用c语言写的程序有吗?

7 楼

INPUT a
b = a * 2
d = a
c = 1 - d
DIM h(a * a)
FOR i = b TO 2 STEP -1
  FOR j = 1 TO i \ 2
    c = c + d
    g = g + 1
    h(c) = g
  NEXT
    d = (a + 1 - ABS(d)) * (d \ a - d MOD a)
NEXT

FOR i = 1 TO a * a
  PRINT USING "###"; h(i);
  IF i MOD a = 0 THEN PRINT
NEXT

8 楼

cls
INPUT a
b = a * 2:n = a:c = 1 - d
DIM a(a * a)
FOR i = b TO 2 STEP -1
FOR j = 1 TO i \ 2
c = c + n:m = m + 1:a(c) = m
NEXT
n = (a + 1 - ABS(n)) * (n \ a - n MOD a)
NEXT
FOR i = 1 TO a * a
PRINT USING "###"; a(i);:IF i MOD a = 0 THEN PRINT
NEXT
end

9 楼

这个也可以用FOR-NEXT循环的

我来回复

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