已知字母A,B,C,D,E,F,G求他们从2位到7位的所有排列方法允许重复       谢谢 谢谢例:AA,AB,AC,AD,AE,AF,AG
      BA,BB,BC,BD,BE,BF,BG
                           。
                           。
                           。
     GA,GB,GC,GD,GE,GF,GG
     AAA,AAB,AAC,AAD,AAE,AAF,AAG
     ABA,ABB,ABC,ABD,ABE,ABF,ABG
                           。
                           。
                           。
   GGGGGGA,GGGGGGB,GGGGGGC,GGGGGGD,GGGGGGE,GGGGGGF,GGGGGGG
本人想了一天也没想出正确的

解决方案 »

  1.   

    Dim a(0 To 6) As Long
    Dim n As LongSub PrintOut()
    Dim s As String, i As Long
    For i = 0 To n
      s = s & Chr(Asc("A") + a(i))
    Next i
    Print s
    End SubSub Subs(s As Long)
    Dim i As Long
    If s <= n Then
      For i = 0 To 6
        a(s) = i
        Subs s + 1
      Next i
    Else
      PrintOut
    End If
    End SubSub Main()
    For n = 1 To 6
      Subs 0
    Next n
    End Sub标准递归解法……8过用VB做算法蛮怪的……
      

  2.   

    用递归,参考:
    http://community.csdn.net/Expert/topic/3167/3167506.xml?temp=.2589228把 TechnoFantasy(冰儿马甲www.applevb.com) 老大的算法修改一下就可以了。。
      

  3.   

    Sub getall(ParamArray x())
    Dim n As Integer, i As Long, num As Integer, j As Integer
    Dim temp1 As String, temp2 As Long
    n = UBound(x) + 1
    For num = 2 To n
    For i = 0 To n ^ num - 1
    temp1 = ""
    temp2 = i
    For j = 1 To num
    temp1 = x(temp2 Mod n) & temp1
    temp2 = temp2 \ n
    Next
    Debug.Print temp1 & vbCrLf
    Next
    Next
    Debug.Print "共 " & (n ^ (n + 1) - 1) / (n - 1)-n & " 种排列!"
    End SubPrivate Sub Command1_Click()
    getall "A", "B", "C", "D", "E","F","G"
    End Sub
      

  4.   

    稍快些:Sub getall(ParamArray x())
    Dim n As Integer, i As Long, num As Integer, j As Integer
    Dim temp1() As String, temp2 As Long
    n = UBound(x) + 1
    For num = 2 To n
    For i = 0 To n ^ num - 1
    temp2 = i
    ReDim temp1(1 To num)
    For j = num To 1 Step -1
    temp1(j) = x(temp2 Mod n)
    temp2 = temp2 \ n
    Next
    Debug.Print Join(temp1, "")
    Next
    Next
    Debug.Print "共 " & (n ^ (n + 1) - 1) / (n - 1) - n & " 种排列!"
    End SubPrivate Sub Command1_Click()
    getall "A", "B", "C", "D", "E", "F", "G"
    End Sub