上次 Chice_wxg(http://www.myvc.net) 写了一个类似的,PF得一塌糊涂http://expert.csdn.net/Expert/topic/877/877098.xml?temp=.4453241可惜我还是没看懂
解决方案 »
- 一段代码,麻烦谁帮我看看,谢谢了。
- 有关inet中的StateChanged事件问题
- 请问如何使用VB连接远程SQL Server数据库,方法及示例?
- 读取二进制文件
- 如何将生成的可执行程序图标进行更改?
- activereport pro 版和std版有什么区别?
- 用activeReport 和并pdf 可以吗,怎么实现??????
- vb与oracle取数问题 急急~~
- vb 怎么做com+怎么调用com+
- ActiveX控件在网页中用,如何使弹出的第二个form一直居于网页上层?--在线等
- listview中增加记录或修改其中的记录,listview有明显的刷新动作,是否可以避免闪烁
- 当窗体包含picture控件时如何显示帮助?
'递归的核心是有个初始函数和一个递归函数
'Text1中放的是参数n,一个List用来保存结果Private Sub Command1_Click()
BeginCalc Val(Text1.Text)
End SubPublic Sub BeginCalc(n As Integer)
Dim sRet As String
Dim i As Integer
List1.Clear
'初始化为第一级,空串,总共N级
BeginSub 1, "", n
'用来显示最后的组合数目
Text2.Text = List1.ListCount
End Sub'递归核心
'nLevel 递归层次
'Last 上一层递归的结果
'n为总的递归层次,即N个字符Public Function BeginSub(nLevel As Integer, Last As String, n As Integer) As String
Dim i As Integer
Dim sRet As String For i = 1 To n
sRet = Last
'判断是否已经存在当前字符,如果存在,则放弃递归,即不会出现112,223,333之类的重复组合
If InStr(sRet, Trim(Str(i))) = 0 Then
sRet = sRet & Trim(Str(i))
'如果递归到最后一层
If nLevel = n Then
'只有递归了N次的字符串才是正解
If Len(sRet) = n Then
List1.AddItem sRet
End If
Else
'加一个层次继续递归
BeginSub nLevel + 1, sRet, n
End If
End If
Next i
End Function' 如果给出如彩票方式的组合,则BeginSub的参数多加一个m 如n=36 m = 7
Public Function BeginSub(nLevel As Integer, Last As String, n As Integer, m As Integer) As String
Dim i As Integer
Dim sRet As String
Dim nStart As Integer
If Last = "" Then
nStart = 1
Else
nStart = Val(Right(Last, 1)) + 1
End If
For i = nStart To n sRet = Last
If InStr(sRet, Trim(Str(i))) = 0 Then
sRet = sRet & Trim(Str(i))
If nLevel = m Then
If Len(sRet) = m Then
List1.AddItem sRet
End If
Else
BeginSub nLevel + 1, sRet, n, m
End If
End If
Next i
End Function提高没有,要看不懂,我只好跳楼了
Dim i1 As Integer
Dim str As String
Dim s As String
str = str2
For i1 = 1 To i
str = str & Mid(str1, i1, 1)
If Len(str) = n Then
List1.AddItem str
Exit Sub
End If
s = Left(str1, i1 - 1)
s = s & Right(str1, Len(str1) - i1)
sort s, str, i - 1, n
str = Left(str, Len(str) - 1)
Next i1
End Substr1为原始字符串,str2为已排序字符,i为剩余字符长度,n为中字符长度
如"abc"排序则
sort "abc","",len("abc"),len("abc")
看明白了,pfpf!!!
不过你的代码有个小bug:只能正确做10以内的组合。
If Len(sRet) = m Then 不应该用这个作退出条件 :》to : gcj123(佛的光辉)
你的代码非常简练:》
提高!!!
感谢!!