读书人

个人认为是超难的排列组合有关问题

发布时间: 2012-02-28 13:06:35 作者: rapoo

个人认为是超难的排列组合问题
26个字母,从a开始排下去:a,b,c......x,y,z 完毕,
再排二位:aa,ab,ac,ad........ax,ay,az 完毕
接着还是二位:ba,bb,bc,bd.........bx,by,bz 完毕
接着还是二位:ca,cb,cc,cd.........cx,cy,cz 完毕
..........
..........
..........
接着排三位:aaa,aab,aac,aad..........aax,aay,aaz 完毕
接着还是三位:aba,abb,abc,abd..........abx,aby,abz 完毕
接着还是三位:aca,acb,abc,acd..........acx,acy,acz 完毕
..........
..........
..........
接着还是三位:baa,bab,bac,bad..........bax,bay,baz 完毕


总之就是吧26个字母不重复的排下去,从少位排起

实在想不出来,请高手指点....




[解决办法]
Private Sub Command1_Click()
Dim i%, j%, mystr$
Dim arr(25)
Dim mycon As New Collection

j = 97
For k = 0 To UBound(arr)
mystr = Chr(j)
arr(k) = mystr
j = j + 1
Next

For i = 0 To UBound(arr)
mycon.Add arr(i)
Next

For Each char1 In mycon
For Each char2 In mycon
Text1.Text = Text1.Text & char1 & char2 & Space$(2)
DoEvents
Next
Next


End Sub
新建一个工程,一个command1,一个text1(设为多行,有竖滚动条)。把以上代码粘贴。
以上代码可以在文本框输出a-z中2个字母的组合,4个,5个组合就别这样搞了,要很长时间的,建议直接输出到文件。
[解决办法]
Private Sub Command1_Click()
Dim S As Integer, E As Integer, N As Integer, count As Integer
S = Asc( "a ")
E = Asc( "f ") '此处可变为asc( "z "),但是,这样会花很时间的
N = E - S
Dim i As Integer, j As Integer
Dim result() As String, tmp As String
ReDim result(N)
Dim Clt As New Collection

For i = 0 To N
result(i) = Chr(i + S)
Clt.Add Chr(i + S)
List1.AddItem result(i)
Next i
count = 2
Do
N = Clt.count
For j = 1 To N
tmp = Clt.Item(j)
For i = 0 To E - S
DoEvents
Clt.Add tmp & result(i)
List1.AddItem tmp & result(i)
Next i
Next j
count = count + 1
Loop While count <= E - S + 1

End Sub

读书人网 >VB

热点推荐