主题:[原创]回字迷宫
phile
[专家分:2310] 发布于 2009-07-02 10:05:00
输入N,得到一个回字矩阵,从(1,1)走到(N,N),判断有多少条合为素数的路线(只能向下或向右)。如输入5
则输出:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 3 2 1
1 1 1 1 1
16
程序如下:
CLS
INPUT N
P = (1 + N) * N / 2
DIM A(N, N), B(P)
FOR I = 1 TO N ‘回字矩阵
A = 1
FOR J = 1 TO N
PRINT A;
A(I, J) = A
IF I > J THEN A = A + 1
IF I + J > N THEN A = A - 1
NEXT J
PRINT
NEXT I
FOR I = N * 2 - 1 TO P ’求在回字阵里的路径和为素数的
B(I) = 1
FOR J = 2 TO INT(SQR(I))
IF I MOD J = 0 THEN B(I) = 0: EXIT FOR
NEXT J, I
I = 1 ‘入口
J = 1
GOSUB 100 ’递归调用
PRINT T
END ‘主程序结束
100
S = S + A(I, J) ’累加路径
IF I = N AND J = N THEN T = T + B(S) ‘判断是否为素数
J = J + 1 ’向右走
IF J <= N THEN GOSUB 100 ’是否是合法位
J = J - 1
I = I + 1 ‘向下走
IF I <= N THEN GOSUB 100 ’是否是合法位
I = I - 1
S = S - A(I, J) ‘多加了一个要减去
RETURN
[em2] [em2]
回复列表 (共11个回复)
沙发
phile [专家分:2310] 发布于 2009-07-21 09:48:00
在这里我加入了两个优化,1是只要做一半最后再统计次数时*2;2是无论怎么走的路径和总是N * 2 - 1 TO (1+N)* N/2 所以只要把这个范围内的素数求出,将是否是素数的(1 OR 0)放入开关变量b数组,一到终点就+b(s)。(S为路径长)
3 楼
gewenbo [专家分:450] 发布于 2009-08-13 11:21:00
[fly][color=800080][b][u][i]还不错[/i][/u][/b][/color][/fly]
4 楼
phile [专家分:2310] 发布于 2009-08-17 13:43:00
?
5 楼
天天和和 [专家分:1420] 发布于 2009-08-23 19:16:00
嗯嗯
值得肯定
6 楼
phile [专家分:2310] 发布于 2009-08-24 12:12:00
呵呵
7 楼
疾疯者L [专家分:100] 发布于 2009-09-04 21:26:00
澳!我原来是这样啊!
8 楼
phile [专家分:2310] 发布于 2009-09-05 12:10:00
[quote]澳!我原来是这样啊![/quote]
什么意思?
9 楼
幽灵密码 [专家分:3510] 发布于 2010-10-24 18:31:00
2
10 楼
phile [专家分:2310] 发布于 2010-10-25 21:02:00
?
我来回复