请教VB中一个排列组合的问题
有N(N小于20)组已知数字,每组数字的个数不同,但每组数字没有重复的,也就是说每组数字最多只有10个。现要将它们排列组合为N位的不重复数字。比如说123,456,789...
有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可以给一些提示代码么?呵呵,就像你不太明白我的题目一样,我也不是太明白你的回答。。。用电脑多了,我感觉我的表达能力和理解力都有问题。。。 展开
我不重复的意思是每组数字出一个数字,而不是111,444,777,0000,2222这样
整除什么?位数么?还有我想得到全部排列结果,随机不现实。
谢谢 chixun9999 的解答,我试试,不过我最初想的是使用一个自定义的循环函数,然后再函数内部再不断调用自己,实现N次循环,可是怎么也弄不来,chixun9999可以给一些提示代码么?呵呵,就像你不太明白我的题目一样,我也不是太明白你的回答。。。用电脑多了,我感觉我的表达能力和理解力都有问题。。。 展开
4个回答
展开全部
有点明白了,就像彩票组合一样吧,把几个不同位置的数进行组合嘛。
分别用一个二维数组和一个一维数组进行暂存就可以啦,二维数组存储那些所谓的分组数字,再把随机得出的结果存在一维数组里,把多的数组位置存上预先设定的一个代号,表示没有数字就可以采用两个嵌套的循环进行组合数字啦。
你说的意思是排列组合的算法有点难度吧,这个是可以用循环代替的,我记得有过这样的算法操作,不过要一段时间回忆和编码。
排列组合的算法一般是用递归函数做,算法的代码会比较清晰简洁,但是可以用循环来代替递归过程,代码就复杂些,要编写完整代码恐怕你的奖励分太少,不值得花时间去搞,这里给一段给你吧:而且还有些问题,
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 <> "" Then temp = Left(temp, Len(temp) - 1)
sx(j) = sx(j) + 1
Else
temp = temp & 预选数字(j, sx(j))
j = j + 1
If j > 组数 Then
组合结果(k) = temp
Debug.Print temp
k = k + 1
Else
sx(j) = 1
End If
End If
Loop
If j = 0 Then Exit Do
Loop
For i = 1 To 5 ^ 5
If 组合结果(i) <> "" Then
Cells(4 + i, 6) = 组合结果(i)
Else
Exit For
End If
Next i
分别用一个二维数组和一个一维数组进行暂存就可以啦,二维数组存储那些所谓的分组数字,再把随机得出的结果存在一维数组里,把多的数组位置存上预先设定的一个代号,表示没有数字就可以采用两个嵌套的循环进行组合数字啦。
你说的意思是排列组合的算法有点难度吧,这个是可以用循环代替的,我记得有过这样的算法操作,不过要一段时间回忆和编码。
排列组合的算法一般是用递归函数做,算法的代码会比较清晰简洁,但是可以用循环来代替递归过程,代码就复杂些,要编写完整代码恐怕你的奖励分太少,不值得花时间去搞,这里给一段给你吧:而且还有些问题,
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 <> "" Then temp = Left(temp, Len(temp) - 1)
sx(j) = sx(j) + 1
Else
temp = temp & 预选数字(j, sx(j))
j = j + 1
If j > 组数 Then
组合结果(k) = temp
Debug.Print temp
k = k + 1
Else
sx(j) = 1
End If
End If
Loop
If j = 0 Then Exit Do
Loop
For i = 1 To 5 ^ 5
If 组合结果(i) <> "" Then
Cells(4 + i, 6) = 组合结果(i)
Else
Exit For
End If
Next i
展开全部
整除问题
得到的数首位是第一个数的首位,
第2位是第2个数的随即一个
第3位是第3个数的随即一个
第4位是第4个数的随即一个
:
:
这样分析,你会了吗
代码就自己写吧
自己动手丰衣足食
得到的数首位是第一个数的首位,
第2位是第2个数的随即一个
第3位是第3个数的随即一个
第4位是第4个数的随即一个
:
:
这样分析,你会了吗
代码就自己写吧
自己动手丰衣足食
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有点晕
N位不重复的数字 N应该小于等于10吧
N位不重复的数字 N应该小于等于10吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不会哎~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询