布尔表达式

来源:互联网 发布:淘宝账号贷款秒批 编辑:程序博客网 时间:2024/05/01 00:25

布尔表达式

  • 查看
  • 提交
  • 统计
  • 提问
总时间限制: 
1000ms 
内存限制: 
65536kB
描述

输入一个布尔表达式,请你输出它的真假值。 
比如:( V | V ) & F & ( F | V ) 
V表示true,F表示false,&表示与,|表示或,!表示非。 
上式的结果是F

输入
输入包含多行,每行一个布尔表达式,表达式中可以有空格,总长度不超过1000
输出
对每行输入,如果表达式为真,输出"V",否则出来"F"
样例输入
( V | V ) & F & ( F| V)!V | V & V & !F & (F | V ) & (!F | F | !V & V)(F&F|V|!V&!F&!(F|F&V))
样例输出   与表达式求值类似,只要注意!特殊判断即可
FVV
    #include<iostream>#include<cmath>#include<cstring>#include<algorithm>#include<iomanip>#include<queue>#include<stack>#include<vector>#include<set>#include<map>using namespace std;char s[1005];stack<bool>B;stack<char>C;int main(){ while(cin.getline(s,1000,'\n')){int len=strlen(s);while(!B.empty())B.pop();while(!C.empty())C.pop();for(int i=0;i<len;++i){if(s[i]==' ')continue;if(s[i]=='V'){bool tmp=true;while(!C.empty()&&C.top()=='!') {C.pop();tmp=!tmp;}B.push(tmp);}else if(s[i]=='F'){bool tmp=false;while(!C.empty()&&C.top()=='!'){C.pop();tmp=!tmp;}B.push(tmp);}else if(s[i]=='('||s[i]=='!'){C.push(s[i]);}else if(s[i]==')'){while(C.top()!='('){char op=C.top();C.pop();bool tmp1=B.top();B.pop();bool tmp2=B.top();B.pop();if(op=='&')B.push(tmp2&&tmp1);else if(op=='|') B.push(tmp2||tmp1);}C.pop();while(!C.empty()&&C.top()=='!'){bool tmp=B.top();B.pop();B.push(!tmp);C.pop();}}else if(s[i]=='&'){while(!C.empty()&&C.top()=='&'){C.pop();bool tmp1=B.top();B.pop();bool tmp2=B.top();B.pop();B.push(tmp1&&tmp2);}C.push(s[i]);}else if(s[i]=='|'){while(!C.empty()&&(C.top()=='|'||C.top()=='&')){bool tmp1=B.top();B.pop();bool tmp2=B.top();B.pop();char op=C.top();C.pop();if(op=='&')B.push(tmp1&&tmp2);else if(op=='|')B.push(tmp1||tmp2);}C.push(s[i]);}}while(!C.empty()) {bool tmp1=B.top();B.pop();bool tmp2=B.top();B.pop();char op=C.top();C.pop();if(op=='&')B.push(tmp1&&tmp2);else if(op=='|')B.push(tmp1||tmp2);}if(B.top())cout<<"V"<<endl;else cout<<"F"<<endl;}return 0;}


原创粉丝点击