回 帖 发 新 帖 刷新版面

主题:QB45,MOZ。。螺旋的 ··············

螺旋的   1 12 11 10
         2 13 16 9 
         3 14 15 8
         4 5  6  7
看到这题目时开始,你能用多少时间写出代码?

回复列表 (共32个回复)

11 楼

阿远用 ' ================== 来分隔不同的功能段落,这是为了方便阅读。

12 楼

TO 9楼

用OUT[I,J]存第I行第J个是什么数字,初值0
X,Y表示当前位置,初值X=1,Y=1
COUNT记录当前填的是第几个数字
DISX,DISY是两个FROM 0 TO 3的一维数组,分别表示向下右上左X,Y的变化情况
ASP表示当前方向,对应DISX,DISY数组

写一个N*M次的循环,每次在X,Y填入COUNT,COUNT+1,若沿当前方向前进将会碰到墙壁或者已经填过数的格子则ASP=(ASP+1)MOD 4  (可以把OUT数组开大些,增加一层墙壁赋初值为N*M+1)

最后输出OUT数组就是螺旋数字了

13 楼

写出来我看下嘛!这么小气做什么?

14 楼

我记得我说过在我的作业本里有,
是跟谁说的?

第一种方法:

DEFINT A-Z
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

第一题的第二种解法:

DEFINT A-Z
INPUT a
IF a > 25 THEN END
CLS
b = a * 2
x1 = 1
y = 1
FOR i = b TO 2 STEP -1
  FOR j = 1 TO i \ 2
    x = x + x1
    y = y + y1
    g = g + 1
    LOCATE x, y
    PRINT USING "###"; g;
  NEXT
    IF x1 = 0 THEN
       x1 = -y1 \ 3
       y1 = 0
    ELSE
       y1 = x1 * 3
       x1 = 0
    END IF
NEXT

15 楼

晕!像我这样数学差的人!自己写代码还行! 看人家的代码!要分析半天!

16 楼

TO MOZ

  这个题如果是N*M的话方法1行不通
  方法2里的
    IF x1 = 0 THEN
       x1 = -y1 \ 3
       y1 = 0
    ELSE
       y1 = x1 * 3
       x1 = 0
    END IF
 果然是经验丰富的老手

17 楼

如果是n*m的话行不通。

当然是行不通了,
一是题目没有要求,
二是你不懂举一反二?

18 楼

。。。。。。。。。。
我没说你的方法2不行啊,方法1的规律要改得很复杂才行

19 楼

我们之间存在代沟
你没听懂我在说什么

方法有很多,
为求目的,可以不择手段
存在就是道理
不管黑猫白猫,能抓到老鼠的就是好猫

20 楼


CLS
INPUT N
DIM A(N, N)
FOR I = 1 TO 4: READ X1(I), Y1(I), X2(I), Y2(I): NEXT I
DATA 1,0,1,-1,0,1,1,1,-1,0,-1,1,0,-1,0,0
Y = 1
FOR I = N - 1 TO 0 STEP -2
  IF I = 0 THEN A(X + 1, Y) = N * N: GOTO 10
  FOR J = 1 TO 4
    FOR K = 1 TO I
      X = X + X1(J): Y = Y + Y1(J)
      S = S + 1
      A(X, Y) = S
    NEXT K
    X = X + X2(J): Y = Y + Y2(J)
  NEXT J
NEXT I
10 FOR I = 1 TO N
  FOR J = 1 TO N
    PRINT USING "####"; A(I, J);
  NEXT J: PRINT
NEXT I
END[em4]

我来回复

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