主题:QB45,MOZ。。螺旋的 ··············
mingzhentanq
[专家分:60] 发布于 2006-10-04 14:45:00
螺旋的 1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
看到这题目时开始,你能用多少时间写出代码?
回复列表 (共32个回复)
11 楼
老大徒伤悲 [专家分:29120] 发布于 2006-10-06 17:19:00
阿远用 ' ================== 来分隔不同的功能段落,这是为了方便阅读。
12 楼
hs3180 [专家分:530] 发布于 2006-10-06 19:16:00
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 楼
啊远 [专家分:2610] 发布于 2006-10-06 19:52:00
写出来我看下嘛!这么小气做什么?
14 楼
moz [专家分:37620] 发布于 2006-10-06 20:04:00
我记得我说过在我的作业本里有,
是跟谁说的?
第一种方法:
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 楼
啊远 [专家分:2610] 发布于 2006-10-06 20:19:00
晕!像我这样数学差的人!自己写代码还行! 看人家的代码!要分析半天!
16 楼
hs3180 [专家分:530] 发布于 2006-10-06 21:33:00
TO MOZ
这个题如果是N*M的话方法1行不通
方法2里的
IF x1 = 0 THEN
x1 = -y1 \ 3
y1 = 0
ELSE
y1 = x1 * 3
x1 = 0
END IF
果然是经验丰富的老手
17 楼
moz [专家分:37620] 发布于 2006-10-06 22:26:00
如果是n*m的话行不通。
当然是行不通了,
一是题目没有要求,
二是你不懂举一反二?
18 楼
hs3180 [专家分:530] 发布于 2006-10-07 12:05:00
。。。。。。。。。。
我没说你的方法2不行啊,方法1的规律要改得很复杂才行
19 楼
moz [专家分:37620] 发布于 2006-10-07 19:30:00
我们之间存在代沟
你没听懂我在说什么
方法有很多,
为求目的,可以不择手段
存在就是道理
不管黑猫白猫,能抓到老鼠的就是好猫
20 楼
黑白猪-- [专家分:420] 发布于 2007-03-29 19:00:00
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]
我来回复