2011年11月18日 星期五

327 - Evaluating Simple C Expressions

本題請你解析C語言的運算式,每個運算式一列且不超過110個字元。每個運算式僅包含整數變數及部份運算符號,且運算式內不會出現常數值。運算式中最多可能會有26個變數,其變數名稱分別為a ~ z(僅包含小寫字元),且每個變數的初始值依序分別為1 ~ 26(即a=1, b=2, ..., n=14, o=15, ..., z=26)。每個變數最多只會在運算式內出現一次,不見得所有26個變數都會被用上。

運算符號的部份包含用來對兩個運算元作加減的 +, - 符號,例如 a + c - d + b = 2 (因為1+3-4+2=2),除此之外還有兩個運算符號:++, --, 僅對單一運算元作運算,且可能出現在運算元的前面或後面,當++運算子出現在變數之前的時候,會先對變數作加一的動作,之後才將被加一的變數用於整個運算式的計算,例如 ++c - b = 2,因為 c 被加到4之後才減b(2)。當++運算子出現在變數之後,會先將變數值拿來做為整個運算式的計算,之後才會對變數做加一的動作,例如 c++ - b = 1,雖然 c 最後的值還是4。--運算子放在變數前後對算式的影響與++運算子一樣,但它會對變數作減一的動作。

以 ++a + b++為例,其算法是先將a加上1,再作a+b的計算,最後才將b加上1。

Input and Output

請對每一列運算式作計算,先輸出該運算式之後再輸出該運算式的值,並在之後的每一列中依a~z的順序輸出各變數值,請參考範列資料。

請忽略運算式中所有的空白字元,並且你可以假設不會存在模稜兩可的運算式,例如 a+++b 不會出現在輸入資料中。另外像是++a++亦不會出現在輸入資料中。

Sample Input

a + b
b - z
a+b--+c++
c+f--+--a
   f-- + c-- + d-++e

Sample Output

Expression: a + b
    value = 3
    a = 1
    b = 2
Expression: b - z
    value = -24
    b = 2
    z = 26
Expression: a+b--+c++
    value = 6
    a = 1
    b = 1
    c = 4
Expression: c+f--+--a
    value = 9
    a = 0
    c = 3
    f = 5
Expression:    f-- + c-- + d-++e
    value = 7
    c = 2
    d = 4
    e = 6
    f = 5


原文出處

沒有留言:

張貼留言