问题是这样的:有N个字母,按每S个分组,可以有多少种不同的组合?(不分前后顺序)
例如:
ABCDEF 有六个字母 按每4个分为一组可以得到:ABCD;ABCE;ABCF;ABDE;ABDF
ACDE;ACDF;ACEF;ADEF;BCDE;BCDF;
BDEF;CDEF共13种组合。(不知道上面有没有排列错掉)N和S是未知数。想了好几个晚上也没有想出来。
例如:
ABCDEF 有六个字母 按每4个分为一组可以得到:ABCD;ABCE;ABCF;ABDE;ABDF
ACDE;ACDF;ACEF;ADEF;BCDE;BCDF;
BDEF;CDEF共13种组合。(不知道上面有没有排列错掉)N和S是未知数。想了好几个晚上也没有想出来。
解决方案 »
- 神奇的Reflector输出的.NET源码与真正的源码有什么区别?
- 如何操作EXCEL
- 大伙们帮我看看,这个vc做的api怎么转化为 vb的声明阿!
- 求助:Ado导入Excel表格的问题。
- 谁有鼠标的光标状态是“小手”的图片?
- 告别VB论坛
- vb 调用delphi的dll函数进行字符串加解密,函数调用成功。用winhex可以在内存中找到解密后的字符,但是在vb里就是取不到字符。
- 用VB操作EXCEL文件的一个小问题?(最易得分了)
- 没有分,但很有价值--共享软件作者一定要看!!!
- 怎样把书扫描成.PDF文件?
- 急呀?怎样调用 Access2000 中带有参数的查询啊(用ADO对象)
- 请教各位能人,查询语句为啥在设置断点时,可以显示出数据,而在未设断点直接运行却无法正确显示,在线等……
s=""
for i= x(1) to x(N)
s=s+i
for i1=去除第一个后的x(1)-x(N)
s=s+i1
for iN=去除第N个后的x(1)-x(n)
s=s+iN
....
....
next
next
Dim n As Integer ' 数组元素个数
Dim i As Long '循环变量
Dim TEMP As Long '二进制转换中间变量
Dim num2 As Integer '中间计数变量
n = UBound(x) - LBound(x) + 1 '数组元素个数
If num > n Then MsgBox "ERR!", vbInformation, "WARNING": Exit Sub
ReDim b(0 To n - 1)
all = 0
For i = 0 To 2 ^ n - 1 '循环
TEMP = i
num2 = 0
For j = 0 To n - 1 '转换为二进制
b(j) = TEMP And 1 '0 or 1
TEMP = TEMP \ 2
If b(j) = 1 Then
num2 = num2 + 1
ReDim Preserve A(1 To num2)
A(num2) = x(LBound(x) + j)
End If
Next
If num2 = num Then
all = all + 1
ReDim Preserve RESULT(1 To all)
RESULT(all) = Join(A, "") '结果保存
Debug.Print RESULT(all) '输出
End If
Next
Debug.Print "从 " & n & " 个元素的数组中选 " & num; " 个元素, 共 " & all & "种组合!"
End SubPrivate Sub Command1_Click()
Dim x, i As Integer
Dim out() As String
x = Array("A", "B", "C", "D", "E", "F")
GETALL 4, x, out
End Sub
输出:ABCD
ABCE
ABDE
ACDE
BCDE
ABCF
ABDF
ACDF
BCDF
ABEF
ACEF
BCEF
ADEF
BDEF
CDEF
从 6 个元素的数组中选 4 个元素, 共 15种组合!
参看拙作:http://blog.csdn.net/northwolves/archive/2004/07/25/51090.aspx
Cm=m*(m-1)*....*(M-n+1)/n!
高中的数学啊。
Dim n As Integer ' 数组元素个数
Dim i As Long '循环变量
Dim TEMP As Long '二进制转换中间变量
Dim num2 As Integer '中间计数变量
n = UBound(x) - LBound(x) + 1 '数组元素个数
If num > n Then MsgBox "ERR!", vbInformation, "WARNING": Exit Sub
ReDim b(0 To n - 1)
all = 0
For i = 0 To 2 ^ n - 1 ' 当n>32时i的值会溢出!TEMP = i
num2 = 0
For j = 0 To n - 1 '转换为二进制
b(j) = TEMP And 1 '0 or 1
TEMP = TEMP \ 2
If b(j) = 1 Then
num2 = num2 + 1
ReDim Preserve A(1 To num2)
A(num2) = x(LBound(x) + j)
End If
Next
If num2 = num Then
all = all + 1
ReDim Preserve RESULT(1 To all)
RESULT(all) = Join(A, "") '结果保存
Debug.Print RESULT(all) '输出
End If
Next
Debug.Print "从 " & n & " 个元素的数组中选 " & num; " 个元素, 共 " & all & "种组合!"
End SubPrivate Sub Command1_Click()
Dim x, i As Integer
Dim out() As String
x = Array("A", "B", "C", "D", "E", "F")
GETALL 4, x, out
End Sub当n>32时i的值会溢出!