采用递归算法实现组合,并显示所有组合结果
一.窗体上添加的控件:
2个按钮;
3个文本框;其中显示结果的那个设置成多行显示,并设置滚动条。
4个标签;
二.运行界面:
见下图:
三.全部代码:
Option Explicit
Private BiaoJI() As Boolean
Private d() As Integer
Private MyArrAy() As String
Private MyStr As String
Private Sub Command1_Click()
Dim i As Integer
Dim LinStr As String
Dim PP As Integer
Dim m As Integer
Dim n As Integer
LinStr = Trim(Text1.Text)
m = 0
PP = InStr(LinStr, ",")
Do While PP <> 0
m = m + 1
ReDim Preserve MyArrAy(1 To m) As String
MyArrAy(m) = Left(LinStr, PP - 1)
LinStr = Right(LinStr, Len(LinStr) - PP)
PP = InStr(LinStr, ",")
Loop
m = m + 1
ReDim Preserve MyArrAy(1 To m) As String
MyArrAy(m) = Trim(LinStr)
n = Val(Text2.Text) '取组合数n
'首先对数据进行合法性检查
If n > m Then
MsgBox "n值不能超过m值!" & vbCrLf & vbCrLf & _
"请检查:" & vbCrLf & vbCrLf & _
"1,输入元素的个数。" & vbCrLf & vbCrLf & _
"2,元素之间是否用西文逗号分隔!", , "错误提示!"
Exit Sub
End If
ReDim BiaoJI(m) As Boolean
ReDim d(m) As Integer
MyStr = ""
Call ZuHe(m, n, 0)
Label4.Caption = "共有:" & JJ(m) / JJ(n) / JJ(m - n) & "种组合。"
Text3.Text = MyStr
End Sub
Private Sub ZuHe(ByVal m As Integer, ByVal n As Integer, ByVal k As Integer)
Dim i As Integer
If k = n Then
For i = 0 To n - 1
MyStr = MyStr & MyArrAy(d(i)) & " "
'Print d(i),
Next i
MyStr = MyStr & vbCrLf
'Print
End If
For i = 1 To m
If Not BiaoJI(i) Then
If k = 0 Then
d(k) = i
BiaoJI(i) = True
Call ZuHe(m, n, k + 1)
BiaoJI(i) = False
Else
If d(k - 1) < i Then
d(k) = i
BiaoJI(i) = True
Call ZuHe(m, n, k + 1)
BiaoJI(i) = False
End If
End If
End If
Next i
End Sub
Private Function JJ(ByVal n As Integer) As Double
Dim i As Integer
JJ = 1
For i = 1 To n
JJ = JJ * i
Next i
End Function
Private Sub Command2_Click()
End
End Sub
2013年2月6日
代码通过VB6运行测试
本文档为【采用递归算法实现组合】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。