鱼C论坛

 找回密码
 立即注册
查看: 2165|回复: 0

[技术交流] 有道题不会

[复制链接]
发表于 2023-1-3 09:17:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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分
请各位指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-20 23:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表