2011年11月28日 星期一

我們的一家都是人


若現在有N張牌,各張牌都不同。
選手若要改變排列順序,只能用「換牌」動作。假設一個「換牌」的動作,可以將順序中的第 1張牌(首牌)與其他牌「交換」位置,形成 1個新的牌組順序。我們現在用 1個長度為 5的字串,表示 1個牌組順序。例如以字串「12345」如果我們進行第 1次「換牌」動作,假設將「牌 1」(首牌)與「牌 5」交換,就形成新的牌組順序「52341」。如果要進行第 2次的「換牌」,就將「牌 5」(首牌)與其他牌交換,即可形成下一個牌組順序。現在給一個「目的地牌組順序」,請從牌組順序「12345」開始,,最後轉換成「目的地牌組順序」。

輸入說明:
第 1行為給定的「起始牌組順序」字串。
第 2行為給定的「目的牌組順序」字串。


輸出說明:第 1行輸出起始牌組順序「 我們的一家都是人」,最後 1行輸出「一家都是我們的人」。第 2行起依序輸出每次「換牌」後的牌組順序。



輸入檔案 1:【檔名:in.txt】
我們的一家都是人
一家都是我們的人



輸出檔案:【檔名:out.txt】

我們的一家都是人
家們的一我都是人
們家的一我都是人
都家的一我們是人
的家都一我們是人
是家都一我們的人
一家都是我們的人

1 則留言:

  1. 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

    回覆刪除