時間限制:
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
找了個表示式求值的題做。。。
結果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設計的機械人卡多甚至會計算一種巢狀...