请教VB中一个排列组合的问题
来源:百度知道 编辑:UC知道 时间:2024/06/09 08:48:30
我不重复的意思是每组数字出一个数字,而不是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