2012年9月13日 星期四

100正式Problem 1:字串的處理


此問題為給定由「整數數字」、「+」、「-」及「特定符號」組成「邏輯表示式」,判斷此邏輯表示式的敘述是否為真?
在此子題中,邏輯表示式的內容只包括「整數數字」、「+」、「-」、「==」及「空格」。其中「+」代表數字運算的「加法」,而「-」代表「減法」;另「==」代表邏輯運算的「是否相等」。
已知「==」運算,在前後比較值「相同」時,其結果為「TRUE」;若「不同」時,其結果為
「FALSE」。在邏輯表示式中的空白均不具運算意義,選手可忽略之。輸入檔的資料,每行代表一個邏輯表示式,請選手判斷其邏輯運算的最後結果。若最後結果為真,該相對應輸出為「TRUE」;若為假,輸出「FALSE」。輸入的字串,不存在邏輯表示式語法的錯誤,選手可不必另外檢查之。其運算的優先順序是「先算加、減法」,「最後才比是否相等」。
輸入說明:
每個輸入檔案有 4 行資料,每行有1 個邏輯表示式,每行最多120 個字。「整數數字」介於0
到100 之間,數字運算結果介於正負1000 之間。
輸出說明:
依序列出輸入檔對應的邏輯表示式檢查結果。若輸入行檢查結果為真,該行相對應輸出為
「TRUE」,反之輸出「FALSE」。(輸出均為大寫,選手請注意。)

輸入檔案 1:【檔名:in1.txt】

25+4-33+22-2==16
15+30==13-58
20+10-50==40-60
20==10+10+10+10-30
輸入檔案 2:【檔名:in2.txt】

24-4+10==10-40
33+5-10==43-5-5-3-2
10-20-30==30-40-30
30-40+10==10-20+30-20

輸出範例:【檔名:out.txt】

TRUE
FALSE
TRUE
FALSE

FALSE
TRUE
TRUE
TRUE

1 則留言:

  1. Dim ans, ans1 As Integer
    Dim x
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in1.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Open App.Path & "\in2.txt" For Input As #3
    Do While Not EOF(1)
    Line Input #1, x
    Call abc
    Loop
    Print #2,
    Do While Not EOF(3)
    Line Input #3, x
    Call abc
    Loop
    Close
    Close
    Close
    End
    End Sub
    Sub abc()
    x = Replace(x, "+", " a ")
    x = Replace(x, "-", " b ")
    x = Replace(x, "==", " c ")
    d = Split(x, " ")
    For i = 0 To UBound(d)
    If d(i) = "c" Then f = i: Exit For
    Next
    ans = d(0)
    For i = 0 To (f - 1)
    If f - 1 = 0 Then ans = d(0): Exit For
    Select Case d(i)
    Case "a"
    ans = ans + Val(d(i + 1))
    Case "b"
    ans = ans - Val(d(i + 1))
    End Select
    Next
    ans1 = d(f + 1)
    For i = (f + 1) To UBound(d)
    If f + 1 = UBound(d) Then ans1 = d(f + 1): Exit For
    Select Case d(i)
    Case "a"
    ans1 = ans1 + Val(d(i + 1))
    Case "b"
    ans1 = ans1 - Val(d(i + 1))
    End Select
    Next
    If ans = ans1 Then Print #2, "TRUE" Else: Print #2, "FALSE"
    End Sub

    回覆刪除