主题:蛇形矩阵问题,代码能再优化吗?
imjohnzj
[专家分:1490] 发布于 2008-10-27 22:36:00
输入 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个回复)
沙发
imjohnzj [专家分:1490] 发布于 2008-10-27 22:39:00
是因为看见贴子:
[url=http://bbs.pfan.cn/post-275699.html][原创]蛇形矩阵---抛砖引玉[/url]
URL="http://bbs.pfan.cn/post-275699.html"
所以,小弟也来做做看。
结果,写了三天才写出来。[em65]
板凳
imjohnzj [专家分:1490] 发布于 2008-10-27 22:49:00
更正:
因为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 楼
imjohnzj [专家分:1490] 发布于 2008-10-28 00:44:00
小弟的代码,速度上应该还算快的吧?
4 楼
imjohnzj [专家分:1490] 发布于 2008-10-28 08:33:00
不对,再想想看,应该还是用数组的快。
小弟的这个方法,只是省些内存,速度上一点也不快的哦。
5 楼
imjohnzj [专家分:1490] 发布于 2008-10-28 17:53:00
没有人气吗?这个贴子好冷哦。
6 楼
moz [专家分:37620] 发布于 2008-10-28 18:11:00
为什么不快?数值很大吗?
如果是正确的,如果效率还可以,为什么还需要别人认同?
如果可以更快更好,为什么不自己去探索一下,非要被别人打败吗?
7 楼
imjohnzj [专家分:1490] 发布于 2008-10-28 18:48:00
moz 说得很在理。
现在,我知道为什么小弟的贴子这么冷了。
8 楼
moz [专家分:37620] 发布于 2008-10-28 21:13:00
哦?
你知道?
可我不知道啊。
麻烦你告诉一下给我知道啊。
冷不冷,跟你没有关系。
如果你愿意,可以到VB区去发一下,
如果觉得太小儿科,在这里发VB代码我也没有意见。
9 楼
imjohnzj [专家分:1490] 发布于 2008-10-28 21:42:00
首先,编程没有小儿科这个概念。
有时,在回贴的进候,写了VB的代码。
那是因为,我在测试代码的时候是用VB在测试。
个人觉得 Windows 下测试代码 用 Windows 下的软件方便。
但是,作为个人的答案,还是要符合题目的要求才合适。
我一不小心回了VB的代码,是我的疏忽。
至于用什么软件测试代码,是我的喜好。
关于“发VB代码”的问题,我看是楼上的看 VB 不顺眼,还是看有人在 QB 区回 VB 代码不顺眼,要不就是看我不顺眼吧。
再说,关于我知道为什么我的贴子冷的问题。
你在6楼问我“为什么还需要别人认同”
从自我感觉方面,小弟我也想混个高手嘛。
我承认这点不是优点,更应该是个缺点。
跟你说个事,我刚来的时候,水平较菜,说话比你更不客气。
现在嘛,我打算说话学客气点。因为感觉这样对自己和他人的好处多点。
你嘛,随便你。
10 楼
ZHANGHONGCHENG [专家分:70] 发布于 2008-11-20 22:40:00
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]
我来回复