请教VB中一个排列组合的问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 08:48:30
有N(N小于20)组已知数字,每组数字的个数不同,但每组数字没有重复的,也就是说每组数字最多只有10个。现要将它们排列组合为N位的不重复数字。比如说123,456,789三组数字,排列为147,148,149,157,158,159,……。另比如说0234,245,12,78四组数字,排列为0217,0218,0227,0228,0417等等。求代码,VB的,谢谢!
我不重复的意思是每组数字出一个数字,而不是111,444,777,0000,2222这样

整除什么?位数么?还有我想得到全部排列结果,随机不现实。

谢谢 chixun9999 的解答,我试试,不过我最初想的是使用一个自定义的循环函数,然后再函数内部再不断调用自己,实现N次循环,可是怎么也弄不来,chixun9999可以给一些提示代码么?呵呵,就像你不太明白我的题目一样,我也不是太明白你的回答。。。用电脑多了,我感觉我的表达能力和理解力都有问题。。。

有点明白了,就像彩票组合一样吧,把几个不同位置的数进行组合嘛。

分别用一个二维数组和一个一维数组进行暂存就可以啦,二维数组存储那些所谓的分组数字,再把随机得出的结果存在一维数组里,把多的数组位置存上预先设定的一个代号,表示没有数字就可以采用两个嵌套的循环进行组合数字啦。

你说的意思是排列组合的算法有点难度吧,这个是可以用循环代替的,我记得有过这样的算法操作,不过要一段时间回忆和编码。

排列组合的算法一般是用递归函数做,算法的代码会比较清晰简洁,但是可以用循环来代替递归过程,代码就复杂些,要编写完整代码恐怕你的奖励分太少,不值得花时间去搞,这里给一段给你吧:而且还有些问题,
1、注意数组都是有上限的,不能应用在组数太多和每组数字太长的地方,要想扩展它靠你自己了。2、扩展后,数组占内存大,可能会出错的。3、以下代码把数组初始化赋值的过程部分省略了,我想那对你很容易吧。

Const 组数 = 4
Dim 预选数字(1 To 5, 1 To 5) As String
Dim 组合结果(1 To 5 ^ 5) As String
Dim i As Integer, j As Integer, k As Integer
Dim st(1 To 组数) As String
Dim temp As String
Dim sx(1 To 5) As Integer '表示每个组数据选定待组合的那个数字的顺序号
sx(1) = 1: sx(2) = 1: sx(3) = 1: sx(4) = 1: sx(5) = 1
'下边开始组合
k = 1
Do
temp = ""
j = 1: sx(j) = 1
Do
If j > 组数 Or 预选数字(j, sx(j)) = "n" Then
j = j - 1
If j = 0 Then Exit Do
If temp