马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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分
请各位指点 |