若現在有N張牌,各張牌都不同。
選手若要改變排列順序,只能用「換牌」動作。假設一個「換牌」的動作,可以將順序中的第 1張牌(首牌)與其他牌「交換」位置,形成 1個新的牌組順序。我們現在用 1個長度為 5的字串,表示 1個牌組順序。例如以字串「12345」如果我們進行第 1次「換牌」動作,假設將「牌 1」(首牌)與「牌 5」交換,就形成新的牌組順序「52341」。如果要進行第 2次的「換牌」,就將「牌 5」(首牌)與其他牌交換,即可形成下一個牌組順序。現在給一個「目的地牌組順序」,請從牌組順序「12345」開始,,最後轉換成「目的地牌組順序」。
輸入說明:
第 1行為給定的「起始牌組順序」字串。
第 2行為給定的「目的牌組順序」字串。
輸出說明:第 1行輸出起始牌組順序「 我們的一家都是人」,最後 1行輸出「一家都是我們的人」。第 2行起依序輸出每次「換牌」後的牌組順序。
輸入檔案 1:【檔名:in.txt】
我們的一家都是人
一家都是我們的人
輸出檔案:【檔名:out.txt】
我們的一家都是人
家們的一我都是人
們家的一我都是人
都家的一我們是人
的家都一我們是人
是家都一我們的人
一家都是我們的人
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\in.txt" For Input As #1
'Open App.Path & "\in9-2.txt" For Input As #2
Open App.Path & "\out.txt" For Output As #3
Input #1, m
Input #1, n
Call A1(n, m)
Print #3, " "
'Input #2, n
'Call A1(n)
Close
Close
Close
End
End Sub
Sub A1(a, b)
Dim S, org, ch2
ReDim org(Len(b)), S(Len(b)), ch2(Len(b))
For i = 1 To Len(b)
m = Mid(b, i, 1)
org(i) = m
Next
For i = 1 To Len(b)
Print #3, org(i);
Next
Print #3, ""
For i = 1 To Len(b)
m = Mid(a, i, 1)
ch2(i) = m
Next
For i = 2 To Len(b)
If ch2(i) = org(i) Then S(i) = "V"
Next
Do
For i = 2 To Len(b)
If org(1) = ch2(1) Then
For j = 2 To Len(b)
If S(j) <> "V" Then t = org(1): org(1) = org(j): org(j) = t: GoTo EX:
Next
Else
If org(1) = ch2(i) And S(i) <> "V" Then t = org(1): org(1) = org(i): org(i) = t: S(i) = "V": Exit For
End If
Next
EX:
For i = 1 To Len(b)
Print #3, org(i);
Next
Print #3, ""
For i = 1 To Len(b)
If ch2(i) = org(i) Then S(i) = "V"
Next
kk = 0
For i = 1 To Len(b)
If S(i) = "V" Then kk = kk + 1
Next
Loop Until kk = Len(b)
End Sub