jjqadd jjqadd
关注数: 0 粉丝数: 0 发帖数: 3 关注贴吧数: 1
vb 按降序输出组合C(m,n)问题 按以下代码能输出比如6个数的全组合降序格式,但是脚标不对,请高手帮忙改改,多谢!需求如下图:Private Sub f(m As Integer, p As Long) '自定义过程求阶乘 Dim i As Integer p = 1 For i = 1 To m '求m的阶乘 p = p * i Next i End Sub Private Sub Command1_Click() '求组合 Dim m As Integer Dim n As Integer Dim c As Long Dim f1 As Long Dim j, k, g, h, l, y, h1 As Integer Dim a(1 To 1000) As String, b(1 To 1000) As String Set xlApp = CreateObject("ket.Application") 'If Dir(App.Path & "\" & "excel.bz") = "" Then '判断EXCEL是否打开 Set xlApp = CreateObject("Excel.Application") '创建EXCEL应用类 xlApp.Visible = True '显示WPS界面 Set xlBook = xlApp.Workbooks.Open(App.Path & "\" & "排列组合.xls") '打开EXCEL工作簿 Set xlsheet = xlBook.Worksheets(1) '打开EXCEL工作表 m = 6 '取C(m,n)值 g = 0 l = m y = 0 For n = 1 To 6 '有多少个数参与组合,n的最大值为6 Call f(m, f1) '调用子过程求m的阶乘 c = f1 '结果赋给c Call f(n, f1) '求n的阶乘 c = c / f1 '结果赋给c Call f(m - n, f1) '求m-n的阶乘 c = c / f1 '组合数结果赋给c(6,1)=6,c(6,2)=15,c(6,3)=20,c(6,4)=15,c(6,5)=6,c(6,6)=1 If n > 1 Then c = g + c End If For j = g + 1 To c 'g为前一个组合的数量,c为当前n的最大组合数即:行数,j为行数 For k = 1 To n 'k为列数,n是几就是几列 For h = l To n Step -1 For y = n To 1 Step -1 If y = c Then a(h) = "a" & m End If Next y a(h) = "a" & h Exit For Next h If h <= 0 Then h = m l = m End If xlsheet.Cells(j, k) = a(h) '输出值 l = l - 1 Next k Next j g = j - 1 Next n End Sub
1 下一页