若現在有 8張撲克牌,點數分別是 1點至 8點,各張牌的點數都不同,並且 8張牌已依點數由小到大排列。選手若要改變排列順序,只能用「插牌」動作。假設一個「插牌」的動作,可以將順序中的第
1張牌(首牌)插入其他牌的後面,形成 1個新的牌組順序。我們現在用 1個長度為 8的字串,表示 1個牌組順序。例如以字串「 12345678」,表示這 8張牌現在依其點數由小到大排列。如果我們進行第 1次「插牌」動作,假設將「牌 1」(首牌)放到「牌 5」之後,就形成新的牌組順序「23451678」。如果要進行第 2次的「插牌」,就將「牌 2」(首牌)插入其他牌之後,即可形成下一個牌組順序。現在給一個「目的地牌組順序」,請從牌組順序「12345678」開始,用最多 7次的「插牌」動作,最後轉換成「目的地牌組順序」。
輸入說明:第 1行為給定的「目的地牌組順序」字串(長度為 8)。
輸出說明:第 1行輸出「起始牌組順序」(12345678),最後 1行輸出給定的「目的地牌組順序」。第 2行起依序輸出每次「插牌」後的牌組順序。(答案並非唯一,評分時會逐行檢查正確性。)輸入檔案 1:【檔名:in1.txt】
62518473
輸入檔案 2:【檔名:in2.txt】
42315678
輸出檔案:【檔名:out.txt】
12345678
23456718
34567218
45672183
56721843
67251843
76251843
62518473
12345678
23415678
34215678
42315678
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\in1.txt" For Input As #1
Open App.Path & "\in2.txt" For Input As #2
Open App.Path & "\out.txt" For Output As #3
Input #1, X
List1.AddItem X
For i = 7 To 1 Step -1
X = Replace(X, i, "")
X = i & X
If re(X) = False Then List1.AddItem X
Next i
For i = List1.ListCount - 1 To 0 Step -1
Print #3, List1.List(i)
Next i
Print #3,
List1.Clear
Input #2, X
List1.AddItem X
For i = 7 To 1 Step -1
X = Replace(X, i, "")
X = i & X
If re(X) = False Then List1.AddItem X
Next i
For i = List1.ListCount - 1 To 0 Step -1
Print #3, List1.List(i)
Next i
Close #3
Close #2
Close #1
End
End Sub
Function re(A)
P = False
For i = 0 To List1.ListCount - 1
If List1.List(i) = A Then P = True: Exit For
Next i
re = P
End Function
out.txt
12345678
23456718
34567218
45672183
56721843
67251843
76251843
62518473
12345678
23456718
34567218
45672318
56742318
67423158
74231568
42315678
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\in1.txt" For Input As #1
Open App.Path & "\in2.txt" For Input As #3
Open App.Path & "\out.txt" For Output As #2
Input #1, n
Call A1(n)
Print #2, ""
Input #3, n
Call A1(n)
Close
Close
End
End Sub
Sub A1(a)
Dim org, cc(8), s(8), cs(8) As Integer
org = Split("X 1 2 3 4 5 6 7 0")
For i = 1 To 8
m = Mid(a, i, 1): cc(i) = m
If m = "8" Then cs(i) = m
Next
Q = 1
Print #2, org(1) & org(2) & org(3) & org(4) & org(5) & org(6) & org(7) & "8"
Do
ans = ""
For i = 1 To 8
If org(Q) = cc(i) Then cs(i) = org(Q): org(Q) = 0: Exit For
Next
For i = 1 To 8
If org(i) <> 0 Then ans = ans & org(i)
Next
For i = 1 To 8
If cs(i) <> 0 Then ans = ans & cs(i)
Next
Print #2, ans
Q = Q + 1
Loop Until Q = 8
End Sub
output :
回覆刪除12345678
23456718
34567218
45672183
56721843
67251843
76251843
62518473
12345678
23456718
34567218
45672318
56742318
67423158
74231568
42315678