组合数不重复vb代码
组合数不重复是一种常见的算法问题,通常用于解决排列组合、概率统计等问题。在VB语言中,可以通过编写相应代码实现组合数不重复。具体实现步骤可以如下:
1.首先定义数组,用于存储组合数结果。例如,定义数组Comb(100,100)表示最大组合数为100C100。
2.编写一个函数CalcComb(n,m),其中n表示总数,m表示需要选出的数目。函数的返回值是组合数。在函数中,可以使用递归算法,通过计算组合数并将结果存储在数组Comb中。
3.运用此函数可以求解任意两个数的组合数,例如求6个数中选3个数的组合数可以写成Comb(6,3)。
4.为了保证计算的结果不重复,可以使用一个布尔型的数组used,记录每个元素是否被使用过。在递归调用函数时,将已经使用过的元素标记为true,以保证组合数不重复。
以下为VB语言中的实现代码:
Option Explicit
Const MAXINT64 = 18446744073709551615#
Private m_Comb() As Double
Dim m_used() As Boolean
Private m_uN As Long
Private m_uR As Long
Public Function CalcComb(ByVal n As Long, ByVal r As Long) As Double
Dim i As Long, j As Long
If n < r Or r < 0 Or n < 0 Then
CalcComb = 0
Exit Function
End If
If n + r > m_uN + m_uR Then
CalcComb = MAXINT64
Exit Function
End If
If r > n / 2 Then r = n - r
If r = 0 Then
CalcComb = 1
Exit Function
End If
If m_uN <> n Or m_uR <> r Then
ReDim m_Comb(n, r)
vb所有代码 ReDim m_used(n)
m_uN = n
m_uR = r
End If
For i = 0 To n
m_used(i) = False
Next i
CalcComb = DoComb(n, r, 0, 0)
End Function
Private Function DoComb(ByVal n As Long, ByVal r As Long, ByVal i As Long, ByVal j As Long) As Double
If j = r Then
DoComb = 1
For i = 0 To n
If m_used(i) Then
DoComb = DoComb * (i + 1) / (j + 1)
j = j + 1
End If
Next i
Else
DoComb = 0
For i = i To n
If Not m_used(i) Then
m_used(i) = True
DoComb = DoComb + DoComb(n, r, i + 1, j + 1)
m_used(i) = False
End If
Next i
End If
End Function
以上代码实现了组合数不重复,可以供VB语言的开发者使用。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论