老师布置的
是为做算24点做准备要求就是我的标题。。
用循环语句我刚学不久。。
所以菜呵呵。

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/2909/2909080.xml?temp=.2501337
      

  2.   

    下面给出一个排列的递归算法,请大家指教。Private Sub Command1_Click() ' 列出数组a 的全排列
    Dim a(8) As String, temp As String
    For i = 0 To 8
    a(i) = i
    Next
    temp = permutation(a, UBound(a))
    Debug.Print temp
    Debug.Print "共有 " & UBound(Split(temp, vbCrLf)) + 1 & " 种排法!"
    End Sub
    Function addxtostr(ByVal x0 As String, ByVal xadd As String) As String ' eg: x0: "1,2,3,4",we will add 5 to x0
    Dim temp, temp2, all() As String, i As Long
    temp = Split(x0, ",")
    ReDim all(UBound(temp) + 1)
    all(0) = xadd & "," & x0 ' return "5,1,2,3,4"
    For i = 1 To UBound(all)
    temp2 = temp
    temp2(i - 1) = temp2(i - 1) & "," & xadd '  add 5 between every two contunious number
    all(i) = Join(temp2, ",")
    Next
    addxtostr = Join(all, vbCrLf)
    Set temp = Nothing
    Set temp2 = Nothing
    Erase all
    End Function
    Function permutation(ByRef a() As String, ByVal n As Long) As String '列出数组a 的前n-1 个元素的全排列
    Dim i As Long, temp, all() As String
    If n = 0 Then permutation = a(0)
    If n = 1 Then permutation = a(0) & "," & a(1) & vbCrLf & a(1) & "," & a(0)
    If n > 1 Then
    temp = Split(permutation(a, n ), vbCrLf) ' 递归
    ReDim all(UBound(temp))
    For i = 0 To UBound(temp)
    all(i) = addxtostr(temp(i), a(n))
    Next
    permutation = Join(all, vbCrLf)
    End If
    Erase all
    End Function