2010年9月11日 星期六

文字抄寫

內容 : 
從機器中,不斷地出現4個英文字母的單字,現在要你抄寫下來,
倘若這個單字已經出現過,則會使用編號上的號碼直接書寫
倘若這個單字沒有出現過,則會賦予單字一個新的號碼

每組新的測資,代表不同事件,請勿將其納入新的號碼

輸入說明 :
每組輸入的第一行 , 有一個數字 N (1≦N≦105),接下來會有瘋狂科學家講出的N行單字,每行由小寫字母a到z所構成的4字單字.

輸出說明 :
若這個字串之前已經出現過,則輸出號碼,若沒有則輸出它將被編寫的號碼.

範例輸入 :
5 eine isis zwei drei zwei
範例輸出 :
New! 1 New! 2 New! 3 New! 4 Old! 3
                                         貼文 BY 阿揚

7 則留言:

  1. Public Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, s
    Input #1, x
    step = Split(x)
    For i = 1 To s
    List1.AddItem step(i - 1)

    If check(i - 1, step(i - 1), p) = True Then
    Print #2, "old!", p
    Else
    k = k + 1
    Print #2, "new!", k
    End If
    Next i
    End
    Close #2
    Close #1
    End Sub

    Public Function check(x, dat, p) As Boolean
    check = False
    For i = 1 To x - 1
    If List1.List(i - 1) = dat Then p = i: check = True: Exit Function
    Next i
    End Function
    只有這個帳號可以貼= =

    回覆刪除
  2. 1。先不管它吧,只有一個帳號可以貼,就先這樣子吧。那不是我們的重點工作。
    2。這題還是原先用陣列單純些。
    但是,當作練習「function」及「list」就還可以啦。
    3。繼續用這樣方式。
    阿揚和小白,你們各別找題目貼上去之後,另一個也要寫一寫哦。當然,若對方有錯,也可以試著提出來,就算說錯了,也是個嘗試哦。再修正就好了。
    熊掌

    回覆刪除
  3. Dim strX
    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
    A = Split(strQ)
    ReDim st(A(0)) As String
    For i = 1 To A(0)
    st(i) = A(i)
    Next i
    For i = 1 To A(0)
    For j = 1 To i
    If st(i) = st(j) And i <> j Then
    Print #2, " Old! " & j;: GoTo isN
    End If
    Next j
    Print #2, " New! " & i;
    isN:
    Next i
    Close #2
    Close #1
    End
    End Sub

    By小白

    回覆刪除
  4. 小白好,
    程式OK,
    ReDim st(A(0)) As String
    For i = 1 To A(0)
    st(i) = A(i)
    Next i
    這四行,不是再用一次split就好了嗎?

    熊掌

    回覆刪除