POJ---2106-Boolean Expressions(stack)
2015-08-16 15:18
375 查看
Boolean Expressions
Description
The objective of the program you are going to produce is to evaluate boolean expressions as the one shown next:
Expression: ( V | V ) & F & ( F | V )
where V is for True, and F is for False. The expressions may include the following operators: ! for not , & for and, | for or , the use of parenthesis for operations grouping is also allowed.
To perform the evaluation of an expression, it will be considered the priority of the operators, the not having the highest, and the or the lowest. The program must yield V or F , as the result for each expression in the input file.
Input
The expressions are of a variable length, although will never exceed 100 symbols. Symbols may be separated by any number of spaces or no spaces at all, therefore, the total length of an expression, as a number of characters, is
unknown.
The number of expressions in the input file is variable and will never be greater than 20. Each expression is presented in a new line, as shown below.
Output
For each test expression, print "Expression " followed by its sequence number, ": ", and the resulting value of the corresponding test expression. Separate the output for consecutive test expressions with a new line.
Use the same format as that shown in the sample output shown below.
Sample Input
Sample Output
Source
México and Central America 2004
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 3662 | Accepted: 1101 |
The objective of the program you are going to produce is to evaluate boolean expressions as the one shown next:
Expression: ( V | V ) & F & ( F | V )
where V is for True, and F is for False. The expressions may include the following operators: ! for not , & for and, | for or , the use of parenthesis for operations grouping is also allowed.
To perform the evaluation of an expression, it will be considered the priority of the operators, the not having the highest, and the or the lowest. The program must yield V or F , as the result for each expression in the input file.
Input
The expressions are of a variable length, although will never exceed 100 symbols. Symbols may be separated by any number of spaces or no spaces at all, therefore, the total length of an expression, as a number of characters, is
unknown.
The number of expressions in the input file is variable and will never be greater than 20. Each expression is presented in a new line, as shown below.
Output
For each test expression, print "Expression " followed by its sequence number, ": ", and the resulting value of the corresponding test expression. Separate the output for consecutive test expressions with a new line.
Use the same format as that shown in the sample output shown below.
Sample Input
( V | V ) & F & ( F| V) !V | V & V & !F & (F | V ) & (!F | F | !V & V) (F&F|V|!V&!F&!(F|F&V))
Sample Output
Expression 1: F Expression 2: V Expression 3: V
Source
México and Central America 2004
#include <iostream> #include <stack> #include <cstring> #include <cstdio> #include <cmath> using namespace std; const int maxn=110; int val[maxn],vtop; ///数值 int op[maxn],otop; ///运算符 void insert(int b) { while(otop && op[otop-1]==3) { b=!b; --otop; } val[vtop++]=b; } void calc() { int b=val[--vtop]; int a=val[--vtop]; int opr=op[--otop]; int c=(a&b); if(opr==1) c=(a|b); insert(c); } int main() { int loop=0; char c; while((c=getchar())!=EOF) { vtop=otop=0; do { if(c=='(') { op[otop++]=0; } else if(c==')') { while(otop && op[otop-1]!=0) calc(); --otop; insert(val[--vtop]); } else if(c=='!') { op[otop++]=3; } else if(c=='&') { while(otop && op[otop-1]>=2) calc(); op[otop++]=2; } else if(c=='|') { while(otop && op[otop-1]>=1) calc(); op[otop++]=1; } else if(c=='V' || c=='F') { insert(c=='V'?1:0); } }while((c=getchar())!='\n' && c!=EOF); while(otop) calc(); cout<<"Expression "<<++loop<<": "<<(val[0]?'V':'F')<<endl; } return 0; }
相关文章推荐
- mac os x 终端 采用 Solarized 配色方案
- 《数据结构与算法分析——c语言描述》读后笔记 4
- 高吞吐量系统设计优化建议(全文已经发表在IBM开发者论坛)
- Spring 学习笔记(四)——数据访问与事务
- HDU 4931 Happy Three Friends(水题)——BestCoder Round #4
- JAVA反射机制练习题
- Linux学习笔记----光盘yum源的搭建
- redis与mysql数据同步
- POJ 2991 Crane(线段树·向量旋转)
- javascript必知必会:面象对象编程
- LeetCode题解2.1.3~2.1.4
- ubuntu安装redis
- java基金会成立
- BST 与 hash table 取舍
- java对象赋值操作
- linux系统怎么截图?linux系统中对指定区域进行截图的详细教程
- 编写一个程序,获取10个1至20的随机数,要求随机数不能重复。
- 算法之1--KMP
- 关于app.FragmentManager和v4包的FragmentPagerAdapter冲突
- Mybatis+Spring3