苗澍辰 发表于 2023-1-3 09:17:03

有道题不会

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]
查看完整版本: 有道题不会