表达式求值(栈的运用)
2014-08-07 21:13
211 查看
Problem Description
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 算出正确答案,以便校对卡多计算的正误。
Input
第一行:N表示要计算的表达式个数 (1<=N<=10)接下来有N行,每行是一个字符串,表示待求值的表达式
(表达式中不会有多余的空格,每行不超过300个字符,表达式中出现的十进制数都不超过1000。)
Output
输出有N行,每一行对应一个表达式的值。
Sample Input
3 add(1,2) max(1,999) add(min(1,1000),add(100,99))
Sample Output
3 999 200
Author
HYNU# include<cstdio> # include<iostream> # include<cstring> using namespace std; int main() { //freopen("a.txt","r",stdin); int n; cin>>n; while(n--) { int i,top=0,peak=0,a[310],sum=0,flag=0; char c[310],s[310]; scanf("%s",s); //先存在一个字符串中; i=0; while(i<strlen(s)) //一个一个的读取,存入栈中; { if(s[i]=='a') { top++; c[top]='a'; i=i+3; continue; } if(s[i]=='m') { top++; if(s[i+1]=='i') { c[top]='i'; i=i+3; } else { c[top]='x'; i=i+3; } continue; } if(s[i]=='('||s[i]==',') { i=i+1; continue; } int x=0; while(s[i]>='0'&&s[i]<='9') { x=x*10+s[i++]-'0'; flag=1; } if(flag==1) //flag用于判别x是不是存入了数据; { a[++peak]=x; flag=0; } if(s[i]==')') //每次遇到右括号便取出两个数,和一个字符,然后进行运算; { i=i+1; int y,z; y=a[peak]; z=a[peak-1]; peak=peak-2; if(c[top]=='a') { sum=y+z; a[++peak]=sum; top--; } else if(c[top]=='i') { x=y<z ? y:z; a[++peak]=x; top--; } else { x=y>z ? y:z; a[++peak]=x; top--; } } } cout<<a[1]<<endl; //最后剩下的一个数便是结果。 } return 0; }
相关文章推荐
- 栈的运用! 表达式求值。
- 表达式求值(C实现,实现多括号,浮点数)---栈的实现以及运用。
- 表达式求值之栈的灵活运用
- 栈的运用-四则运算表达式求值
- 运用栈对算数表达式求值
- 栈的运用(算数表达式求值的算符优先算法 十以内简单版)
- POJ 2106-Boolean Expressions,双栈运用类似表达式求值!
- 栈的运用(中缀表达式转换为后缀表达式,并对后缀表达式求值。)
- 数据结构 表达式求值
- Java表达式求值器 汇总
- 数据结构 栈的应用-- 表达式求值
- js编写trim()函数及正则表达式的运用
- LeetCode-150. Evaluate Reverse Polish Notation (JAVA)逆波兰表达式求值
- 表达式求值算法----栈的应用
- 表达式求值(二)
- awk基础与正则表达式运用
- 运用正则表达式匹配所有表名
- 【数据结构】book3_3 表达式求值
- Dijkstra的双栈算法表达式求值算法
- NYOJ35表达式求值