河南省第四屆acm省賽 表示式求值(棧的應用)

2021-07-11 17:20:34 字數 1585 閱讀 2317

時間限制:

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

樣例輸入

3

add(1,2)

max(1,999)

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

樣例輸出

3

999200

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

#include

#include

#include

#include

using namespace std;

char str[1000];

int main()

else if(str[i - 1] == 'x')

else if(str[i - 1] == 'n')

}if(str[i] >= '0' && str[i] <= '9')//將字串轉化數字

i--;

s.push(sum);//並將其入棧。

}if(str[i] == ')')//遇到「)」就連續出三個數字;

int d;

if(b[2] == -1)//判斷是哪中運算方式

else if(b[2] == -2)

else if(b[2] == -3)

s.push(d);}}

printf("%d\n", s.top());//最後還剩下乙個數字,那麼就將數字出來就是最後結果

s.pop();

}return 0;}

河南第四屆ACM省賽(BOBSLEDDING)

題意 乙個人參加越野比賽,有很多山頭,過這些山頭時不能超過指定的速度,他在剛開始時速度為1,他可以每秒加速或減速1m,或者保持不變,問他途中可以到達的最大的速度 思路 剛開始想的就是模擬,太亂看了別人的解題報告才知道是dp ac include include include include inc...

河南第四屆ACM省賽(走迷宮)

思路 這道題主要難在減枝上,單純的dfs會超時,先把超時 寫上來,有時間改改 錯誤 include include include include include include include include include include include typedef long long ll...

nyoj 303 序號互換 第四屆河南省賽

dr.kong設計了乙個聰明的機械人卡多,卡多會對電子 中的單元格座標快速計算出來。單元格的行座標是由數字編號的數字序號,而列座標使用字母序號。觀察字母序號,發現第1列到第26列的字母序號分別為a,b,z,接著,第27列序號為aa,第28列為ab,依此類推。若給dr.kong的機械人卡多乙個數字序號...