2012年9月30日 星期日

100模擬 Problem 1:字串的處理


此問題為給定由「英文」、「數字」及「特定符號」組成「邏輯表示式」,判斷此邏輯表示式的敘述是否為真?
子題1: 在此子題中,邏輯表示式的內容只包括「true」、「false」、「==」、「!=」及「空格」。
其中「true」代表邏輯運算的「真」,而「false」代表「假」;另「==」代表邏輯運算的「是否相等」,而「!=」代表「是否不相等」。已知「==」運算,在前後比較值「同為true」或「同為false」時,其結果為「true」;但若比較值「一個true、一個false」時,其結果為「false」。另知「!=」運算前後比較值「同為true」或「同為false」時,其結果為「false」;但若比較值「一個true、一個false」時,其結果為「true」。在邏輯表示式中的空白均不具運算意義,選手可忽略之。輸入檔的資料,每行代表一個邏輯表示式,請選手判斷其邏輯運算的最後結果。若最後結果為真,該相對應輸出為「TRUE」;若為假,輸出「FALSE」。輸入的字串,不存在邏輯表示式語法的錯誤,選手可不必另外檢查之。本題的邏輯運算由多個子邏輯運算組成時,其運算應由左自右逐步檢查。
輸入說明:
共有4 行資料,每行有1 個邏輯表示式,每行最多120 個字。
輸出說明:
共4 行,分別列出輸入檔對應的邏輯表示式計算結果。若最後結果為真,該相對應輸出為
「TRUE」,反之輸出「FALSE」。(輸出均為大寫,選手請注意。)
輸入範例:【檔名:in-1-1.txt】
true==false!=false
true!=true==false==true==false
false==false!=true!=true!=flase==true
false!=false==true==false==true!=false==true!=false
輸出範例:【檔名:out-1-1.txt】
FALSE
FALSE
TRUE
TRUE

2 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\IN1-1.TXT" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    '== =And != = Xor
    Do While Not EOF(1)
    Input #1, x
    For i = 1 To Len(x)
    If Mid(x, i, 2) = "==" Then x = Replace(x, "==", "3")
    If Mid(x, i, 2) = "!=" Then x = Replace(x, "!=", "4")
    If Mid(x, i, 4) = "true" Then x = Replace(x, "true", "1")
    If Mid(x, i, 5) = "false" Then x = Replace(x, "false", "0")
    Next
    If Len(x) > 1 Then
    Do Until Len(x) = 1
    i = 2
    If Mid(x, i, 1) = "3" Then If Mid(x, i - 1, 1) = Mid(x, i + 1, 1) Then x = "1" & Mid(x, 4) Else: x = "0" & Mid(x, 4)
    If Mid(x, i, 1) = "4" Then If Mid(x, i - 1, 1) = Mid(x, i + 1, 1) Then x = "0" & Mid(x, 4) Else: x = "1" & Mid(x, 4)
    Loop
    End If
    If x = "0" Then Print #2, "FALSE"
    If x = "1" Then Print #2, "TRUE"
    Loop
    Close
    Close
    End
    End Sub

    回覆刪除
  2. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in-1-1.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Do While Not EOF(1)
    Line Input #1, n
    For i = 1 To Len(n)
    If Mid(n, i, 2) = "==" Then n = Replace(n, "==", 3)
    If Mid(n, i, 2) = "!=" Then n = Replace(n, "!=", 4)
    If Mid(n, i, 4) = "true" Then n = Replace(n, "true", 1)
    If Mid(n, i, 5) = "false" Then n = Replace(n, "false", 0)
    Next i
    Do Until Len(n) = 1
    Select Case Left(n, 3)
    Case "031"
    n = Replace(n, "031", 0)
    Case "030"
    n = Replace(n, "030", 1)
    Case "130"
    n = Replace(n, "130", 0)
    Case "131"
    n = Replace(n, "131", 1)
    Case "140"
    n = Replace(n, "140", 1)
    Case "141"
    n = Replace(n, "141", 0)
    Case "041"
    n = Replace(n, "041", 1)
    Case "040"
    n = Replace(n, "040", 0)
    End Select
    Loop
    If n = "0" Then Print #2, "FALSE" Else Print #2, "TRUE"
    Loop
    Close #2
    Close #1
    End
    End Sub

    回覆刪除