時間限制:
3000 ms | 記憶體限制:
65535 kb
難度:3 描述
dr.kong設計的機械人卡多掌握了加減法運算以後,最近又學會了一些簡單的函式求值,比如,它知道函式min(20,23)的值是20 ,add(10,98) 的值是108等等。經過訓練,dr.kong設計的機械人卡多甚至會計算一種巢狀的更複雜的
表示式。
假設表示式可以簡單定義為:
1. 乙個正的十進位制數
x是乙個表示式。
2. 如果 x
和 y
是表示式,則 函式
min(
x,y
)也是表示式,其值為x,y 中的最小數。
3. 如果 x
和 y
是表示式,則 函式max
(x,y
)也是表示式,其值為x,y 中的最大數。
4.如果
x 和 y 是
表示式,則 函式
add(
x,y
)也是表示式,其值為x,y 之和。
例如,表示式
max(
add(
1,2),7)
的值為 7。
請你編寫程式,
對於給定的一組表示式,幫助
dr.kong 算出正確答案,以便校對卡多計算的正誤。
輸入第一行: n 表示要計算的表示式個數 (1≤ n ≤ 10)
接下來有n行, 每行是乙個字串,表示待求值的表示式
(表示式中不會有多餘的空格,每行不超過300個字元,表示式中出現的十進位制數都不
超過1000。)
輸出輸出有n行,每一行對應乙個表示式的值。
樣例輸入
3add(1,2)
max(1,999)
add(min(1,1000),add(100,99))
樣例輸出
3999200
**第四屆河南省程式設計大賽
上傳者
張云聰之前寫了這道。打算練練手,調了幾個小時,醉了。重點是replace函式沒記清。replace三個引數時,第二個引數表示長度,不是末位置。還有變換後字串長度要更新…… 把遇到')'時,對應的'('標記位置為pos1,')'為pos2,找到',',find函式查詢。把'('和','之間的字串賦值為left,','和')'之間的字串賦值為right,然後再判斷s[pos1-1]的字元是'n','x',還是'd',把結果覆蓋。從頭再迴圈繼續操作,直到表示式裡沒有'('為止...
#include#include#include#include#includeusing namespace std;
int main()
else
}else if(s[pos1-1]=='n')
else
}i=-1;
len=s.size();//勿忘。。哎,忘了寫了
} }
cout<
表示式求值
程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...
表示式求值
既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...
表示式求值
寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。先貼第一次的 include include include include include includeusing namespace std char data 7 7 int sign char ...