2010年7月30日 星期五

排列組合一

排列組合一
從檔案 in.txt 讀入排列組合的項目,將所有可能的排列輸出到out.txt。
輸入範例:
a b c 1

輸出範例:
abc1
bac1
cab1
1abc
acb1
a1bc
bca1
b1ac
cba1
c1ab
1bac
1cab
ab1c
ba1c
ca1b
1acb
ac1b
a1cb
bc1a
b1ca
cb1a
c1ba
1bca
1cba

4 則留言:

  1. 本來想說用迴圈,不過 步驟比較麻煩
    Private Sub Form_Activate()
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, step
    step = Replace(step, " ", "")
    Call ans(step, st)
    Close #1
    Close #2
    End Sub

    Function ans(step, st)
    If Len(st) < Len(step) Then
    For i = 1 To Len(step)
    stm = Mid(step, i, 1)
    If InStr(st, stm) = 0 Then Call ans(step, st & stm)
    Next i
    Else
    Print #2, st
    End If
    End Function

    回覆刪除
  2. 由於這題實在不太懂要怎麼做,
    所以就請教了阿揚了!!

    Dim StrQ
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Line Input #1, StrQ
    StrQ = Replace(StrQ, " ", "")
    Call F(StrQ, ans)
    Close #2
    Close #1
    End
    End Sub
    Public Function F(StrQ, ans)
    If Len(StrQ) > Len(ans) Then
    For i = 1 To Len(StrQ)
    ansST = Mid(StrQ, i, 1)
    If InStr(ans, ansST) = 0 Then Call F(StrQ, ans & ansST)
    Next i
    Else
    Print #2, ans
    End If
    End Function

    回覆刪除
  3. 阿揚、小白好,
    說實話,你們真強,這題我會出題,還真是不會用遞迴來做呢。
    很好,要記起來,要背起來,教教另外的兩個吧。
    (我也要學學啊,教學相長嗎?謝謝啦。)
    不過,這題是真的要用遞迴來解,才是正解。
    我的話,會用檔案寫寫再讀讀的方式來解。
    當然,也可以用list來當成檔案的方式來寫跟讀。
    當然,可以用遞迴解的題目,理論上,(我大學裡上過),一定可以用迴圈來解。
    只是,阿揚真的可以用迴圈解出來嗎?
    努力一下,我給獎金,100。如何。試試吧。

    回覆刪除
  4. 哦,忘了補充一下,這題我在出題時,並不是以一個字為限,
    所以,阿揚在解題時,將所有的空白直接去掉並不是正確的。
    再試試。例如
    12 ab 台灣 happy

    回覆刪除