标题:[求助]生成数字按蛇形排列的方阵
只看楼主
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
结帖率:66.67%
 问题点数:0 回复次数:7 
[求助]生成数字按蛇形排列的方阵
要求:单击“开始”,在窗体输出蛇形排列的方阵




搜索更多相关主题的帖子: 蛇形排列 方阵 数字 单击 
2006-05-02 21:58
xinfresh
Rank: 4
等 级:贵宾
威 望:13
帖 子:594
专家分:0
注 册:2006-1-13
得分:0 
这是以前电脑报上的一个题目.不过我今天和朋友说好出去玩,晚上吧,呵

E-mail:xinfresh@QQ:383094053校内:http:///getuser.do?id=234719042
2006-05-03 09:02
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
得分:0 
我今天一会也要出去的
那我们晚上来讨论
谢谢你啊

生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2006-05-03 09:49
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
得分:0 

Option Explicit

Private Sub Command1_Click()
Dim i As Integer
Dim j As Integer
Dim n As Integer, sout As Integer
Dim a(1 To 5, 1 To 5) As Integer
Dim Flags As String
Flags = "Right"
i = 1: j = 1
n = 1
Do While n <= 25
a(i, j) = n
Select Case Flags
Case "Right"
If j = UBound(a, 1) Then
Flags = "Down"
Else
Flags = "Right"
End If
Case "Down"
If j = UBound(a, 1) Then
Flags = "Left"
Else
Flags = "Right"
End If
Case "Left"
If j = LBound(a, 1) Then
Flags = "Down"
Else
Flags = "Left"
End If

End Select
Select Case Flags
Case "Right"
j = j + 1
Case "Down"
i = i + 1
Case "Left"
j = j - 1

End Select
n = n + 1
Loop
For i = 1 To 5
For j = 1 To 5
Print a(i, j);
Next
Print
Next

End Sub


我的msn: myfend@
2006-05-03 09:59
xinfresh
Rank: 4
等 级:贵宾
威 望:13
帖 子:594
专家分:0
注 册:2006-1-13
得分:0 
Dim m As Integer, k As Integer
Dim flags As Integer
flags = 1
For m = 0 To n - 1
For k = 0 To n - 1
Matrixn(m, k) = m * n + (k + 1 - (flags - 1) / 2 * (n + 1 - 2 * (k + 1)))
Text1.Text = Text1.Text & Format(Matrixn(m, k), "0000") & " "
Next
flags = flags * -1
Text1.Text = Text1.Text & vbNewLine
Next

E-mail:xinfresh@QQ:383094053校内:http:///getuser.do?id=234719042
2006-05-03 17:59
xinfresh
Rank: 4
等 级:贵宾
威 望:13
帖 子:594
专家分:0
注 册:2006-1-13
得分:0 
qtz16m4q.rar (1.93 KB) [求助]生成数字按蛇形排列的方阵


E-mail:xinfresh@QQ:383094053校内:http:///getuser.do?id=234719042
2006-05-03 17:59
xinfresh
Rank: 4
等 级:贵宾
威 望:13
帖 子:594
专家分:0
注 册:2006-1-13
得分:0 
这里面我自己推了一个小函数使运算简化:
Matrixn(m, k) = m * n + (k + 1 - (flags - 1) / 2 * (n + 1 - 2 * (k + 1)))
很明显,奇数行的值,等于行值(从0开始)*n+列值(从0开始)+1
而偶数行的值,等于行值(从0开始)*n+(n+1)-(列值(从0开始)+1)
如果希望只用一个函数,使用不同的参量(flags)来区别这两个功能,这是个简单的数学推导:
Matrixn(m, k) = m * n + (k + 1 - (flags - 1) / 2 * (n + 1 - 2 * (k + 1)))
你可以看这个部分:
(k + 1 - (flags - 1) / 2 * (n + 1 - 2 * (k + 1)))
当flags为 1的时候,这部分就=k+1
当flags为-1的时候,这部分就=(n+1)-(k+1)
调整flags,就达到目的了.

[此贴子已经被作者于2006-5-4 23:21:06编辑过]


E-mail:xinfresh@QQ:383094053校内:http:///getuser.do?id=234719042
2006-05-03 18:05
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
得分:0 
我出去了刚回来
现在马上看

生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2006-05-03 19:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-61619-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.444396 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved