回 帖 发 新 帖 刷新版面

主题:蛇形矩阵问题,代码能再优化吗?

输入 wid 
输出 wid * wid 的正方蛇形矩阵

小弟三天才写出的代码(含调试)
高手请指点,能再优化吗?

CLS
INPUT wid
size = wid * wid
FOR Y = 1 To wid
    out = size: PRINT out;
    IF Y MOD 2 THEN size = size - Y - Y ELSE size = size - 1
    FOR X = 1 To wid - 1
        IF wid - Y >= X THEN _
            IF X MOD 2 XOR Y MOD 2 THEN out = out - (X + X) ELSE out = out - (Y + Y - 1) ELSE _
            IF X MOD 2 XOR Y MOD 2 THEN out = out - ((wid - Y) * 2 + 1) ELSE out = out - (wid - X) * 2
        PRINT out;
    NEXT X
    PRINT
NEXT Y
END

回复列表 (共13个回复)

沙发

是因为看见贴子:
[url=http://bbs.pfan.cn/post-275699.html][原创]蛇形矩阵---抛砖引玉[/url]
URL="http://bbs.pfan.cn/post-275699.html"

所以,小弟也来做做看。
结果,写了三天才写出来。[em65]

板凳

更正:

因为QB不支持一条句语分多行写:空格+“_”。
所以,代码改成如下。

CLS
INPUT wid
sz = wid * wid
FOR Y = 1 TO wid
    ot = sz: PRINT USING "####"; ot;
    IF Y MOD 2 THEN sz = sz - Y - Y ELSE sz = sz - 1
    FOR X = 1 TO wid - 1
        IF wid - Y >= X THEN
            IF X MOD 2 XOR Y MOD 2 THEN ot = ot - (X + X) ELSE ot = ot - (Y + Y - 1)
        ELSE
            IF X MOD 2 XOR Y MOD 2 THEN ot = ot - ((wid - Y) * 2 + 1) ELSE ot = ot - (wid - X) * 2
        END IF
        PRINT USING "####"; ot;
    NEXT X
    PRINT
NEXT Y
END

3 楼

小弟的代码,速度上应该还算快的吧?

4 楼

不对,再想想看,应该还是用数组的快。
小弟的这个方法,只是省些内存,速度上一点也不快的哦。

5 楼

没有人气吗?这个贴子好冷哦。

6 楼

为什么不快?数值很大吗?
如果是正确的,如果效率还可以,为什么还需要别人认同?
如果可以更快更好,为什么不自己去探索一下,非要被别人打败吗?

7 楼

moz 说得很在理。

现在,我知道为什么小弟的贴子这么冷了。

8 楼

哦?
你知道?
可我不知道啊。
麻烦你告诉一下给我知道啊。

冷不冷,跟你没有关系。
如果你愿意,可以到VB区去发一下,
如果觉得太小儿科,在这里发VB代码我也没有意见。

9 楼

首先,编程没有小儿科这个概念。

有时,在回贴的进候,写了VB的代码。
那是因为,我在测试代码的时候是用VB在测试。
个人觉得 Windows 下测试代码 用 Windows 下的软件方便。
但是,作为个人的答案,还是要符合题目的要求才合适。

我一不小心回了VB的代码,是我的疏忽。
至于用什么软件测试代码,是我的喜好。

关于“发VB代码”的问题,我看是楼上的看 VB 不顺眼,还是看有人在 QB 区回 VB 代码不顺眼,要不就是看我不顺眼吧。

再说,关于我知道为什么我的贴子冷的问题。
你在6楼问我“为什么还需要别人认同”
从自我感觉方面,小弟我也想混个高手嘛。
我承认这点不是优点,更应该是个缺点。

跟你说个事,我刚来的时候,水平较菜,说话比你更不客气。
现在嘛,我打算说话学客气点。因为感觉这样对自己和他人的好处多点。

你嘛,随便你。

10 楼

 1  2  3  4
 8  7  6  5
 9 10 11 12
16 17 18 19
CLS
INPUT N
FOR I=1 TO N
FOR J=1 TO N
IF I MOD 2<>0 THEN A=A+1 ELSE A=A-1
PRINT USING"###";A;
NEXT J
PRINT 
A=A+N
NEXT I
END
[em9]

我来回复

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