请教VB高手:如何打印出排列组合的所有项目

目前我在编一个彩票软件玩玩,自己不太精通VB,故肯请大家帮忙。有一组数,存放在数组中,如nums(0)=2nums(1)=7nums(2)=10nums(3)=13num... 目前我在编一个彩票软件玩玩,自己不太精通VB,故肯请大家帮忙。

有一组数,存放在数组中,如
nums(0)=2
nums(1)=7
nums(2)=10
nums(3)=13
nums(4)=14
nums(5)=17
nums(6)=19
nums(7)=20
nums(8)=29
nums(9)=30
正在的要求是,从中取出6个,没有先后顺序,根据数学排列组合知识,结果应该是
C(上标6,下标10)这个结果是知道的,
可是如何打印出每一个结果呢?
请大家帮忙,
结果用debug.print 一条一条输出。
我其实需要http://topic.csdn.net/t/20050227/20/3810371.html
第11楼的效果,
所不同的是,他是从一组连续的数中选出几个,
而我需要的是从不一定连续的数据中选出几个。
我的感觉是,只要将他的代码中的某些部分用数组元素替换即可。
但是我不会。肯请高手赐教。
展开
 我来答
miniappA13o8pWx0iBrT
2007-08-05 · TA获得超过219个赞
知道小有建树答主
回答量:235
采纳率:0%
帮助的人:211万
展开全部
'这回行了吧

'窗体中需两个Text、两个Label、一个Command
Option Explicit
Private mlngAllNumCount As Long, mlngGetNumCount As Long
Private mblnCancelProc As Boolean, mlngCurResultCount As Long
Private mastrOneResult() As String
Private mlngFileNo As Long, mstrResultFile As String
Dim nums(9) As Integer

Private Sub Form_Load()

nums(0) = 2
nums(1) = 7
nums(2) = 10
nums(3) = 13
nums(4) = 14
nums(5) = 17
nums(6) = 19
nums(7) = 20
nums(8) = 29
nums(9) = 30
Command1.Caption = "处理"
mstrResultFile = App.Path & "\1.txt" '存放输出结果的文件,结果多时,不要尝试用记事本打开!会死机的。

End Sub
Private Sub Form_Unload(Cancel As Integer)
mblnCancelProc = True
End Sub
Private Sub Command1_Click()
Dim t As Single, i As Long
If Command1.Caption = "处理" Then
mlngAllNumCount = Text1.Text '数字总个数
mlngGetNumCount = Text2.Text '每组要取的数字个数
i = Zhuhe(mlngAllNumCount, mlngGetNumCount)
If i = 0 Then
MsgBox "结果太多,请不要尝试了!"
Exit Sub
End If
Label2.Caption = i
t = Timer
mblnCancelProc = False '中断处理的标志
Command1.Caption = "停止"
mlngCurResultCount = 0 '已产生出的组合总数
ReDim mastrOneResult(1 To mlngGetNumCount)
mlngFileNo = FreeFile
Open mstrResultFile For Output As #mlngFileNo
ListNum 1, 1
Close #mlngFileNo
Label1.Caption = mlngCurResultCount
Command1.Caption = "处理"
Me.Caption = Timer - t
Else
mblnCancelProc = True
End If
End Sub
Private Function Zhuhe(AllNum As Long, GetNum As Long) As Long
'算组合总数的过程,为防溢出,而做了特别设计
'只要结果总数在20亿以内,都不会溢出的
'太大的数不太可能会完成穷举,本程序也就不做尝试了
'接近溢出的上限列举:65536取2、2345取3、477取4、193取5、110取6
'75取7、58取8、49取9、40取10、39取11、37取12、35取13、34取15、33取16等

Dim i As Long, j As Long, k As Long, colget As Collection
Dim m As Long, n As Long, Num(1) As Long
On Error GoTo fail
Num(0) = 1
Set colget = New Collection '保存分母中的所有乘数(GetNum!)
For i = GetNum To 1 Step -1
colget.Add nums(i)
Next
For i = AllNum To AllNum - GetNum + 1 Step -1 '分子中所有乘数循环相乘
'让两个乘数尽可能与分母约分
Num(1) = i
For k = 0 To 1
m = colget.Count
If m > 0 Then
n = m
For j = 1 To m
If j > n Then Exit For
If Num(k) Mod colget(j) = 0 Then
Num(k) = Num(k) \ colget(j)
colget.Remove j
n = n - 1
j = j - 1
End If
Next
End If
Next
Num(0) = Num(0) * Num(1) '分子中的两个乘数分别约去分母再相乘,可防中间过程的溢出
Next
Zhuhe = Num(0)
Exit Function
fail:
End Function
Private Sub ListNum(ByVal Start As Long, ByVal Level As Long)
Dim i As Long
If mblnCancelProc Then Exit Sub
For i = Start To mlngAllNumCount - mlngGetNumCount + Level
mastrOneResult(Level) = nums(i - 1)
If Level < mlngGetNumCount Then '是否到了最底层
ListNum i + 1, Level + 1 '没到底,递归啦,这是本过程的核心,很简单哟
Else
Print #mlngFileNo, Join(mastrOneResult, vbTab) '递归到最深层,就可以输出了
mlngCurResultCount = mlngCurResultCount + 1
If mlngCurResultCount Mod &H2000& = 0 Then
Label1.Caption = mlngCurResultCount '显示实际找出了多少组数字
DoEvents
End If
End If
Next
End Sub
哪个账号没人用
2007-08-04 · TA获得超过251个赞
知道小有建树答主
回答量:701
采纳率:0%
帮助的人:518万
展开全部
比较麻烦哦,需要设置random值10为拖号,然后进行随机筛选

最简单的方法,使用6个一样的数组进行整合,规定下标不允许重复
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风之追梦者
2007-08-04
知道答主
回答量:11
采纳率:0%
帮助的人:18.3万
展开全部
rem n为nums数组下标,m+1为组个数,k为生成数对的个数
function yes(a(),b())
for i=0 to m
if a(m)=b(m) then yes=0:exit sub
next
yes=-1
end function
rem 主程序
dim a(k,m)
randomize timer
for i=1 to k
1 x=rnd*100
for j=1 to x
swap nums(int(rnd*n+1)),nums(int(rnd*n+1))
randomize timer*rnd
next
for j=1 to i-1
if yes(a(j),nums())=0 then goto 1
next
for j=0 to m
a(i,j)=nums(j);
debug.print a(i,j);
next
debug.print
next
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
广语戎g6
2007-08-05 · 超过11用户采纳过TA的回答
知道答主
回答量:515
采纳率:0%
帮助的人:0
展开全部
提问者:真龙的传人 - 首席运营官 十三级

答复共 3 条
比较麻烦哦,需要设置random值10为拖号,然后进行随机筛选

最简单的方法,使用6个一样的数组进行整合,规定下标不允许重复
回答者:哪个账号没人用 - 同进士出身 六级 8-4 16:58

'明白你的意思了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式