求数据组合的算法..

beyh 2005-11-04 06:47:47
一个12位的数组..每5个为一组..
求出所有可能的组合..但中间不能有重复的(排列顺序不同但数字一样的也算)
如: 1 2 3 4
按两个为一组的话就是
1 2
1 3
1 4
2 3
2 4
3 4
----
2 1 或是 3 1 都不算进去..

...全文
213 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyh 2005-11-10
  • 打赏
  • 举报
回复
不知道还有没有更加优化的算法?
脆皮大雪糕 2005-11-05
  • 打赏
  • 举报
回复
第二个测试用例:
Dim aryTest() As String
aryTest = Split("1,2,3,4,5,6,7,8,9,10", ",") '这次我们用10个元素
test aryTest, 7 '生成每组7个元素的组合

输出结果:
1 2 3 4 5 6 7
1 2 3 4 5 6 8
1 2 3 4 5 6 9
1 2 3 4 5 6 10
1 2 3 4 5 7 8
1 2 3 4 5 7 9
1 2 3 4 5 7 10
1 2 3 4 5 8 9
1 2 3 4 5 8 10
1 2 3 4 5 9 10
1 2 3 4 6 7 8
1 2 3 4 6 7 9
1 2 3 4 6 7 10
1 2 3 4 6 8 9
1 2 3 4 6 8 10
1 2 3 4 6 9 10
1 2 3 4 7 8 9
1 2 3 4 7 8 10
1 2 3 4 7 9 10
1 2 3 4 8 9 10
1 2 3 5 6 7 8
1 2 3 5 6 7 9
1 2 3 5 6 7 10
1 2 3 5 6 8 9
1 2 3 5 6 8 10
1 2 3 5 6 9 10
1 2 3 5 7 8 9
1 2 3 5 7 8 10
1 2 3 5 7 9 10
1 2 3 5 8 9 10
1 2 3 6 7 8 9
1 2 3 6 7 8 10
1 2 3 6 7 9 10
1 2 3 6 8 9 10
1 2 3 7 8 9 10
1 2 4 5 6 7 8
1 2 4 5 6 7 9
1 2 4 5 6 7 10
1 2 4 5 6 8 9
1 2 4 5 6 8 10
1 2 4 5 6 9 10
1 2 4 5 7 8 9
1 2 4 5 7 8 10
1 2 4 5 7 9 10
1 2 4 5 8 9 10
1 2 4 6 7 8 9
1 2 4 6 7 8 10
1 2 4 6 7 9 10
1 2 4 6 8 9 10
1 2 4 7 8 9 10
1 2 5 6 7 8 9
1 2 5 6 7 8 10
1 2 5 6 7 9 10
1 2 5 6 8 9 10
1 2 5 7 8 9 10
1 2 6 7 8 9 10
1 3 4 5 6 7 8
1 3 4 5 6 7 9
1 3 4 5 6 7 10
1 3 4 5 6 8 9
1 3 4 5 6 8 10
1 3 4 5 6 9 10
1 3 4 5 7 8 9
1 3 4 5 7 8 10
1 3 4 5 7 9 10
1 3 4 5 8 9 10
1 3 4 6 7 8 9
1 3 4 6 7 8 10
1 3 4 6 7 9 10
1 3 4 6 8 9 10
1 3 4 7 8 9 10
1 3 5 6 7 8 9
1 3 5 6 7 8 10
1 3 5 6 7 9 10
1 3 5 6 8 9 10
1 3 5 7 8 9 10
1 3 6 7 8 9 10
1 4 5 6 7 8 9
1 4 5 6 7 8 10
1 4 5 6 7 9 10
1 4 5 6 8 9 10
1 4 5 7 8 9 10
1 4 6 7 8 9 10
1 5 6 7 8 9 10
2 3 4 5 6 7 8
2 3 4 5 6 7 9
2 3 4 5 6 7 10
2 3 4 5 6 8 9
2 3 4 5 6 8 10
2 3 4 5 6 9 10
2 3 4 5 7 8 9
2 3 4 5 7 8 10
2 3 4 5 7 9 10
2 3 4 5 8 9 10
2 3 4 6 7 8 9
2 3 4 6 7 8 10
2 3 4 6 7 9 10
2 3 4 6 8 9 10
2 3 4 7 8 9 10
2 3 5 6 7 8 9
2 3 5 6 7 8 10
2 3 5 6 7 9 10
2 3 5 6 8 9 10
2 3 5 7 8 9 10
2 3 6 7 8 9 10
2 4 5 6 7 8 9
2 4 5 6 7 8 10
2 4 5 6 7 9 10
2 4 5 6 8 9 10
2 4 5 7 8 9 10
2 4 6 7 8 9 10
2 5 6 7 8 9 10
3 4 5 6 7 8 9
3 4 5 6 7 8 10
3 4 5 6 7 9 10
3 4 5 6 8 9 10
3 4 5 7 8 9 10
3 4 6 7 8 9 10
3 5 6 7 8 9 10
4 5 6 7 8 9 10
脆皮大雪糕 2005-11-05
  • 打赏
  • 举报
回复
测试用例
Dim aryTest() As String
aryTest = Split("1,2,3,4,5", ",") '初始化输入数组,数组类型可以任意
test aryTest, 3 '生成每组三个元素的组合

输出结果:
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
脆皮大雪糕 2005-11-05
  • 打赏
  • 举报
回复
'递归调用子过程,aryInput 为需要进行处理的数组,GroupNum 为每个组合的元素数目,其他参数第一次调用时不必传入
Private Sub test(aryInput As Variant, ByVal GroupNum As Integer, Optional ByVal Workinggroup As Integer = 1, Optional ByVal WorkingPointer As Integer = 0, Optional ByVal WorkingStr As String)
Dim i As Integer
If Workinggroup > GroupNum Then
Debug.Print WorkingStr '结果输出
Exit Sub
End If
For i = LBound(aryInput) + WorkingPointer To UBound(aryInput)
test aryInput, GroupNum, Workinggroup + 1, i + 1, WorkingStr & aryInput(i) & " "
Next
End Sub
beyh 2005-11-04
  • 打赏
  • 举报
回复
万一我要改成20位然后每3个一组的话岂不是要重新写程序?
northwolves 2005-11-04
  • 打赏
  • 举报
回复
http://blog.csdn.net/northwolves/archive/2004/07/25/51090.aspx
sjtuyjc 2005-11-04
  • 打赏
  • 举报
回复
for i1=1 to 8
for i2=i1+1 to 9
for i3=i2+1 to 10
for i4=i3+1 to 11
for i5=i4+1 to 12
s=cstr(i1)+" "+cstr(i2)+" "+cstr(i3)+" "+cstr(i4)+" "+cstr(i5)
debug.print s
Next i5
Next i4
Next i3
Next i2
Next i1

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧