ABCDEFGHIJ十个字母,每次从中取出5个.求遍历所有组合的代码.
谢.

解决方案 »

  1.   

    单纯的用for循环是解决不了问题的,我以前做过这样的程序,可以获得任何数字的全排列,不过因为其他原因不方便公开,给你提示一下吧,把数字排列之后,比如1,2,3,4,5第二列是1,2,3,4,6,总是最后一位在变换,当满了10之后,对你这个例子而言,进位,他的上一位加一,同样上一位也要满9加一,依次类推,前一位的最大值总要比后一位小一,最后到了6,7,8,9,10的时候,循环结束。不是很难的
      

  2.   

    听起来有点意思,实践一下..先谢了.
    不方便公开的话能否mail给兄弟学习一下?谢谢
    [email protected]
      

  3.   

    Private Sub Command1_Click()
    Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer
    For a = 65 To 70
    For b = a + 1 To 71
    For c = b + 1 To 72
    For d = c + 1 To 73
    For e = d + 1 To 74
    Debug.Print Chr(a) & vbTab & Chr(b) & vbTab & Chr(c) & vbTab & Chr(d) & vbTab & Chr(e)
    Next
    Next
    Next
    Next
    Next
    End Sub
      

  4.   

    http://blog.csdn.net/northwolves/archive/2004/07/25/51090.aspxSub GETALL(ByVal num As Integer, ByRef x As Variant, ByRef RESULT() As String, Optional ByRef all As Long)Dim A() As String, b() As Integer '临时数组
    Dim n As Integer ' 数组元素个数
    Dim i As Long '循环变量
    Dim TEMP As Long '二进制转换中间变量
    Dim num2 As Integer '中间计数变量
    n = UBound(x) - LBound(x) + 1 '数组元素个数
    If num > n Then MsgBox "ERR!", vbInformation, "WARNING": Exit Sub
    ReDim b(0 To n - 1)
    all = 0
    For i = 0 To 2 ^ n - 1 '循环
    TEMP = i
    num2 = 0
    For J = 0 To n - 1 '转换为二进制
    b(J) = TEMP And 1 '0 or 1
    TEMP = TEMP \ 2
    If b(J) = 1 Then
    num2 = num2 + 1
    ReDim Preserve A(1 To num2)
    A(num2) = x(LBound(x) + J)
    End If
    Next
    If num2 = num Then
    all = all + 1
    ReDim Preserve RESULT(1 To all)
    RESULT(all) = Join(A, ",")   '结果保存
    Debug.Print RESULT(all) '输出
    End If
    Next
    Debug.Print "从 " & n & " 个元素的数组中选 " & num; " 个元素, 共 " & all & "种组合!"
    End SubPrivate Sub Command1_Click()
    Dim x, i As Integer
    Dim out() As String
    x = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
    GETALL 5, x, out
    End Sub