表示式求值 nyoj 305

2021-06-20 23:15:58 字數 1885 閱讀 3983

時間限制:

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

找了個表示式求值的題做。。。

結果re了幾次, 因為我沒有考慮到值輸入乙個數字的情況。。。

然後看了下最優**= =**好簡潔。。。

#include #include #include #include #include using namespace std;

stack cha;

stack num;

char s[310];

void f()

else if(a == 'i')

else }

int main (void)

if(isdigit(s[i]))

if(s[i] == ',' && s[i - 1] != ')')

if(s[i] == ')')

f();

}} if(k != 0)

num.push(k);

printf("%d\n", num.top());

while(!num.empty())

num.pop();

while(!cha.empty())

cha.pop();

} return 0;

}

2014-3-17更新遞迴寫法

#include int max(int a, int b) 

int min(int a, int b)

//之前將max和min寫成巨集定義的形式,一直runtimeerror

char s[1000];

int start;

int f()

}int main (void)

return 0;

}

NYOJ305表示式求值

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 dr.kong設計的機械人卡多掌握了加減法運算以後,最近又學會了一些簡單的函式求值,比如,它知道函式min 20,23 的值是20 add 10,98 的值是108等等。經過訓練,dr.kong設計的機械人卡多甚至會計算一種巢狀...

nyoj305 表示式求值

時間限制 3000 ms 記憶體限制 65535 kb 難度 3描述 dr.kong設計的機械人卡多掌握了加減法運算以後,最近又學會了一些簡單的函式求值,比如,它知道函式min 20,23 的值是20 add 10,98 的值是108等等。經過訓練,dr.kong設計的機械人卡多甚至會計算一種巢狀的...

NYOJ 305 表示式求值 (遞迴)

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 dr.kong設計的機械人卡多掌握了加減法運算以後,最近又學會了一些簡單的函式求值,比如,它知道函式min 20,23 的值是20 add 10,98 的值是108等等。經過訓練,dr.kong設計的機械人卡多甚至會計算一種巢狀...