遞迴解(參考W.J.S.大大的)

Dim F As Long

Private Sub Form_Load()

    Dim A() As String, I As Integer, S As String

    S = "1234"

    For I = 1 To Len(S)

        ReDim Preserve A(I) : A(I) = Mid(S, I, 1)

    Next

    F = FreeFile

    Open "C:\Test.txt" For Output As #F

    Cal(A(), "", Space(UBound(A)))

    Close #F

    Shell("notepad.exe C:\Test.txt", vbNormalFocus)

    End

End Sub

 

Sub Cal(ByVal A() As String, ByVal S As String, ByVal K As String)

    Dim I As Integer, X As String

    '原理就是用一個字串來判斷是否已經把數字用掉

    '原來是四個空白用掉的話就填成星"*"

    '之後判斷數字有沒有四個,有的話輸出結束這次遞迴

    '回到上一個呼叫的地方繼續做,因為一個迴圈從1~4所以一個組合完成了

    '那個判斷有沒有用掉數字的字串會回到上一個未改變的

    '繼續那個迴圈繼續遞迴,所以可以窮舉所有排列組合

    If Len(S) = UBound(A) Then

        '想要做的事

        Exit Sub

    End If

 

    For I = 1 To UBound(A)

        If Mid$(K, I, 1) = " " Then

            X = K : Mid$(X, I, 1) = "*"

            Cal(A(), S & A(I), X)

        End If

    Next

End Sub

 

arrow
arrow
    全站熱搜

    讓地獄深紅的天亮 發表在 痞客邦 留言(2) 人氣()