表示式求值

2021-09-07 11:20:16 字數 1737 閱讀 6727

時間限制:

3000 ms  |  記憶體限制:

65535 kb

描寫敘述

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行,每一行相應乙個表示式的值。

例子輸入

3

add(1,2)

max(1,999)

add(min(1,1000),add(100,99))

例子輸出

3

999200

**

第四屆河南省程式設計大賽

上傳者

張云聰

思路:這道題做到如今這個時間。我真是夠了。

。然後還要注意標頭檔案,不然編譯錯誤。。

還是細緻一點。。

言歸正傳

比方是 add(min(1,1000),add(100,99)) 就是先把'('的位置用location陣列存一下。假設以下出現')'那麼location[k-1]這個位置相應的『(』 是 此『)』相應的。經過**->add(1,add(100,99)) -> add(1,199)->120  如今感覺寫的還能夠。。。挺好的。

#include#include#include#includeusing namespace std;

int main()

{ int t,i,j,lens,k,fanloc,flag,g;

string s,s1;

char left[301],right[301],sum[301];

int location[301],left1,right1;

cin>>t;

while(t--)

{ memset(location,0,sizeof(location));

k=0;

cin>>s;

lens=s.size();

for(i=0;i

表示式求值

程式的說明見清華大學出版社 資料結構 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 ...