有道题不会
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!=' ')t=t+s;
s=t;
bool mum=0;
bool f=false;
si=sinull;
sc=scnull;
for(int i=0;i<s.size();i++) {
if(s=='V'){
mum=true;
f=true;
continue;
}
if(s=='F'){
mum=false;
f=true;
continue;
}
if(f){//前面是数字
si.push(mum);
mum=0;
f=false;
}
if(s=='(')sc.push('(');//左括号入栈
else if(s==')'){
while(!sc.empty()&&sc.top()!='(')js(i);
sc.pop();//弹出左括号
}
else if(s=='&'||s=='|'||s=='!'){
while(!sc.empty()&&yxj(sc.top())>=yxj(s))js(i);
sc.push(s);
}
}
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分
请各位指点
页:
[1]