|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
openjudge上3.3数据结构之栈的6263:布尔表达式- #include<bits/stdc++.h>
- using namespace std;
- stack<bool> si,sinull,st;
- stack<char>sc,scnull;
- int yxj(char op){//优先级
- if(op=='|')return 1;
- if(op=='&')return 2;
- if(op=='!')return 3;
- if(op=='(')return 0;//(不用计算
- }
- void js(int z){//计算一步
- bool a,b;
- char op=sc.top();sc.pop();
- if(op=='!'){
- a=si.top();
- si.push(!a);
- }
- else if(op=='&'||op=='|'){
- a=si.top();si.pop();
- b=si.top();si.pop();
- if(op=='&')si.push(a&&b);
- if(op=='|')si.push(a||b);
- }
- }
- string s,t;
- int main() {
- while(getline(cin,s)){
- for(int i=0;i<s.size();i++)if(s[i]!=' ')t=t+s[i];
- s=t;
- bool mum=0;
- bool f=false;
- si=sinull;
- sc=scnull;
- for(int i=0;i<s.size();i++) {
- if(s[i]=='V'){
- mum=true;
- f=true;
- continue;
- }
- if(s[i]=='F'){
- mum=false;
- f=true;
- continue;
- }
- if(f){//前面是数字
- si.push(mum);
- mum=0;
- f=false;
- }
- if(s[i]=='(')sc.push('(');//左括号入栈
- else if(s[i]==')'){
- while(!sc.empty()&&sc.top()!='(')js(i);
- sc.pop();//弹出左括号
- }
- else if(s[i]=='&'||s[i]=='|'||s[i]=='!'){
- while(!sc.empty()&&yxj(sc.top())>=yxj(s[i]))js(i);
- sc.push(s[i]);
- }
- }
- if(f){//前面是数字
- si.push(mum);
- }
- while(!sc.empty()) js(0);
- if(si.top()==true)cout<<"V\n";
- else if(si.top()==false)cout<<"F\n";
- }
- return 0;
- }
复制代码
只得了5分
请各位指点 |
|