回 帖 发 新 帖 刷新版面

主题:[原创]回字迷宫

输入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个回复)

沙发

在这里我加入了两个优化,1是只要做一半最后再统计次数时*2;2是无论怎么走的路径和总是N * 2 - 1 TO (1+N)* N/2 所以只要把这个范围内的素数求出,将是否是素数的(1 OR 0)放入开关变量b数组,一到终点就+b(s)。(S为路径长)

板凳

Thank you!!!

3 楼


[fly][color=800080][b][u][i]还不错[/i][/u][/b][/color][/fly]

4 楼

5 楼

嗯嗯
值得肯定

6 楼

呵呵

7 楼

澳!我原来是这样啊!

8 楼

[quote]澳!我原来是这样啊![/quote]
什么意思?

9 楼

2

10 楼

我来回复

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