遞迴解(參考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
留言列表