2010年11月8日 星期一

Problem 3:子字串特徵的判斷(99模擬)

此問題為給定某些英文文句,其內容只有「英文、數字、空白及標點符號」,請選手判斷此文
句是否符合某些檢查條件?
子題1(10%):是否文句中存在任何子字串,其以「任一數字」開頭,「任一數字」結尾,中
間存在1 個至3 個大寫字母。
輸入說明:
第1~3 行表示欲檢查之3 句英文文句。
輸出說明:
第1~3 行分別對應第1~3 句檢查文句,若存在符合條件之子字串即輸出「有」,不存在即輸出
「沒有」。

輸入範例:【檔名:in-3-1.txt】
Tom Lin’s employee number is A123BSC45.
The price is 45 US dollars.
The machine code is 65K2.
輸出範例:【檔名:out-3-1.txt】

沒有

子題2(10%):是否文句中存在任何子字串,其為「合理」的「台北市」、「台中市」或「高
雄市」身份證字號。
註:
(1) 身份證字號第1 碼為地區碼,「台北市」以「A」開頭、「台中市」以「B」開頭、「高雄市」
以「E」開頭。
(2) 身份證字號的第2 碼為「性別」碼,其值應為「1」或「2」。
(3) 若將身份證字號的「地區碼」改為2 碼數字,其中「A」改為「10」、「B」改為「11」、「E」
改為「14」,其後併入原身份證後9 碼數字,成為1 個新的11 位數字碼。將此數字碼由左
至右分別乘以「1、9、8、7、6、5、4、3、2、1、1」,其相乘後的總和應可被10 整除。
輸入說明:
第1~3 行表示欲檢查之文句。
輸出說明:
若存在合理的身份證字號即輸出「有」,不存在即輸出「沒有」。
輸入範例:【檔名:in-3-2.txt】
His ID number is A120441768.
Her ID number is B272857734.
Their ID numbers are E286585485, E282467997, and E195445887.
輸出範例:【檔名:out-3-2.txt】

沒有

2 則留言:

  1. 3-1
    Dim ans As Boolean
    Private Sub Form_Load()
    Me.Hide
    Dim n(100) As Integer
    Open App.Path & "\in-3-1.txt" For Input As #1
    Open App.Path & "\out-3-1.txt" For Input As #2
    Do Until EOF(1)
    Line Input #1, step
    p = 1
    For i = 1 To Len(step)
    k = Mid(step, i, 1)
    If Asc(k) >= 48 And Asc(k) <= 57 Then
    n(p) = i: p = p + 1
    End If
    Next i
    ans = True
    For i = 1 To p - 2
    If (n(i) - n(i + 1)) <> -1 Then
    ans = False
    End If
    Next i
    If ans Then Print #2, "沒有" Else Print #2, "有"
    Loop
    Close #2
    Close #1
    End
    End Sub
    by Yung

    回覆刪除
  2. 3-2
    Dim ans As Integer
    Private Sub Form_Load()
    Me.Hide
    Dim nans As Boolean
    Open App.Path & "\in-3-2.txt" For Input As #1
    Open App.Path & "\out-3-2.txt" For Input As #2
    Do Until EOF(1)
    nans = False
    Line Input #1, step
    step = Replace(step, ",", "")
    step = Replace(step, ".", "")
    k = Split(step)
    For i = 0 To UBound(k)
    ans = 0
    If (Len(k(i)) = 10 And Val(Right(k(i), 9)) < 300000000) And (Mid(k(i), 2, 1) = 1 Or Mid(k(i), 2, 1) = 2) Then
    n = Left(k(i), 1)
    Select Case n
    Case "A"
    ans = 1
    Case "B"
    ans = 10
    Case "E"
    ans = 37
    End Select
    qq = 8
    For j = 2 To 10
    ans = ans + Val(Mid(k(i), j, 1)) * qq
    If qq > 1 Then qq = qq - 1
    Next j
    If ans Mod 10 = 0 Then nans = True
    End If
    Next i
    If nans Then
    Print #2, "有"
    Else
    Print #2, "沒有"
    End If
    Loop
    Close #2
    Close #1
    End
    End Sub
    BY Yung

    回覆刪除