问大家一个问题
有70个球 标号为 1,2,3,n..,70
现要随机抽 4 个球,但 4 个球是不能重复,且第4位>第3位>第2位>第1位
当 w=3,X=4,Y=5,Z=6时,1和2这个数字就没作用了
请问有几多组这样的组合
求写出公式与结果
我写的排列程序如下:Dim SArr() As Byte
Dim MaxColIndex As Integer
Dim MaxRowIndex As Integer
Private Sub Command1_Click()
MaxColIndex = 10
MaxRowIndex = 8
ReDim SArr(3) As Byte
Call GetData(4)
End Sub
Private Function GetData(ByVal Cd As Byte) As Boolean
On Error GoTo ToErr
Dim i As Integer, j As Integer
Dim IsExit As Boolean
Do While Not IsExit
IsExit = False
For i = Cd - 1 To 0 Step -1
If SArr(i) + (Cd - i - 1) < MaxIndex Then
SArr(i) = SArr(i) + 1
IsExit = True
For j = i + 1 To Cd - 1
If SArr(i) < MaxIndex Then
SArr(j) = SArr(i) + (j - i)
End If
Next j
Exit For
End If
Next i
If IsExit = True Then
IsExit = False
Debug.Print SArr(0) & "--" & SArr(1) & "--" & SArr(2) & "--" & SArr(3) & "--" & SArr(4) & "--" & SArr(5) & "--" & SArr(6)
Else
IsExit = True
End If
Loop
GetData = True
Exit Function
ToErr:
GetData = False
End Function
就是剩下要计算有多少组这样的组合,用于进度条的Max值用啊.急~~~~~~~~~~~~~~~~~
有70个球 标号为 1,2,3,n..,70
现要随机抽 4 个球,但 4 个球是不能重复,且第4位>第3位>第2位>第1位
当 w=3,X=4,Y=5,Z=6时,1和2这个数字就没作用了
请问有几多组这样的组合
求写出公式与结果
我写的排列程序如下:Dim SArr() As Byte
Dim MaxColIndex As Integer
Dim MaxRowIndex As Integer
Private Sub Command1_Click()
MaxColIndex = 10
MaxRowIndex = 8
ReDim SArr(3) As Byte
Call GetData(4)
End Sub
Private Function GetData(ByVal Cd As Byte) As Boolean
On Error GoTo ToErr
Dim i As Integer, j As Integer
Dim IsExit As Boolean
Do While Not IsExit
IsExit = False
For i = Cd - 1 To 0 Step -1
If SArr(i) + (Cd - i - 1) < MaxIndex Then
SArr(i) = SArr(i) + 1
IsExit = True
For j = i + 1 To Cd - 1
If SArr(i) < MaxIndex Then
SArr(j) = SArr(i) + (j - i)
End If
Next j
Exit For
End If
Next i
If IsExit = True Then
IsExit = False
Debug.Print SArr(0) & "--" & SArr(1) & "--" & SArr(2) & "--" & SArr(3) & "--" & SArr(4) & "--" & SArr(5) & "--" & SArr(6)
Else
IsExit = True
End If
Loop
GetData = True
Exit Function
ToErr:
GetData = False
End Function
就是剩下要计算有多少组这样的组合,用于进度条的Max值用啊.急~~~~~~~~~~~~~~~~~
解决方案 »
- callfunction是不是不能在VB6与flash通讯中应用。
- VB连接ORACLE一次成功二次报错
- 不同文件间具有相同ID的几个数两两相减如何解决?
- "菜单嵌入toolbar"代码
- Messbox对话框
- 请问怎么在TreeView的节点中保存它所代表的数据?就像VC的SetItemData
- winsock发送数据
- ListView的ReportIcon图像显示位置
- vb创建文件的函数
- VB6中DataGrid与ADO控件绑定,可否根据字段值不同设置不同显示颜色??只有20分好给
- 请问如何添加 communications控件
- 比较有意思的问题,vb如何截获网页中一个flash游戏提交给asp的参数名和值
Dim MaxIndex As Integer
MaxIndex = MaxColIndex * MaxRowIndex - 1
Private Const MaxIndex As Long = 4
Dim Test As LongPrivate Sub CarryNum(arr() As Long)
Dim Idx As Long
Dim V As Long
V = MaxValue - MaxIndex
Idx = MaxIndex
Do
arr(Idx) = arr(Idx) + 1
If arr(Idx) > V + Idx Then
Idx = Idx - 1
If Idx = 0 Then
Test = -1
Exit Sub
End If
Else
Exit Do
End If
Loop
Do While Idx < MaxIndex
Idx = Idx + 1
arr(Idx) = arr(Idx - 1) + 1
Loop
End SubPrivate Sub Command1_Click()
Dim a(1 To MaxIndex) As Long
Dim i As Long
Dim t As Double
Dim n As Long
Test = 0
t = Timer
For i = 1 To MaxIndex
a(i) = i
Next
Do
n = n + 1
CarryNum a
Loop Until Test = -1
MsgBox "用时:" & Timer - t & vbCrLf & "共计:" & n
End Sub
就是剩下要计算有多少组这样的组合,用于进度条的Max值用啊.急~~~~~~~~~~~~~~~~~
如果要输出结果,那就会慢许多,因为要改变上例中数组arr的类型为Variant,这样要慢一点,同时输出耗时比较大,试了下70选4一次性输出结果要12秒多,35选5要2秒多.....
! 就是阶乘。你不会这个都不明白吧?n! = n*(n-1)*(n-2)* ........ *2*1如:
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer, l As Integer, n As Long
Dim a() As Integer
For i = 1 To 67
For j = i + 1 To 68
For k = j + 1 To 69
For l = k + 1 To 70
n = n + 1
ReDim Preserve a(4, n)
a(1, n) = i
a(2, n) = j
a(3, n) = k
a(4, n) = l
Next l
Next k
Next j
Next i
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer, l As Integer, n As Long
Dim a() As Integer
For i = 1 To 67
For j = i + 1 To 68
For k = j + 1 To 69
For l = k + 1 To 70
n = n + 1
ReDim Preserve a(4, n)
a(1, n) = i
a(2, n) = j
a(3, n) = k
a(4, n) = l
Next l
Next k
Next j
Next i
Text1.Text = n
End Subn 为 916895
犹其是 vbman2003 你的算法挺好的,值得参考.
Chen8013 真是数学高手,本人一向数学都不是很好,
连排列与组合数学是高中学的都不知道,太羞愧了.