6263:布尔表达式
描述
输入一个布尔表达式,请你输出它的真假值。
比如:( 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))
样例输出
F V V
代码:
#include<bits/stdc++.h> using namespace std; char fan(char x)//取反 {if(x=='F')//如果x为假return 'V';//回真elsereturn 'F';//回假 } char shuang(char x,char y,char fu)//双目运算 {int a,b,ans=0;if(x=='V')//如果x为真a=1;elsea=0;if(y=='V')//如果y为真b=1;elseb=0;if(fu=='|')//判断符号ans=a||b;elseans=a&&b;if(ans==1)return 'V';//回真elsereturn 'F';//回假 } int main() {char x,y,fu,ch;string a;int len,i;while(getline(cin,a))//循环输入多组数据{len=a.size();//测长度stack<char>s1,s2;//s1存符号,s2存字母queue<char>q;//q存后缀表达式//Step1:中缀转后缀for(i=len-1;i>=0;i--)//从右到左遍历中缀表达式{if(isalpha(a[i])||a[i]=='!')//如果当前字符为字母或!q.push(a[i]);//直接入队if(a[i]=='&'||a[i]=='|'||a[i]==')')//如果当前字符为&,|,)s1.push(a[i]);//直接入s1栈if(a[i]=='(')//如果当前字符为({while(!s1.empty()&&s1.top()!=')')//把栈中)之后入栈的所有符号全部入队q.push(s1.top()),s1.pop();s1.pop();}}while(!s1.empty())//如果栈中还有其他符号q.push(s1.top()),s1.pop();//则全部入队//Step2:计算后缀表达式的值while(!q.empty())//如果队列不为空{ch=q.front();//获得队首元素q.pop();//删除队首元素if(isalpha(ch))//如果队首为字母s2.push(ch);//入s2栈else//否则就是运算符s1.push(ch);//入s1栈if(!s2.empty()&&!s1.empty()&&s1.top()=='!')//如果s1,s2栈都不为空,且s1栈顶符号为!{//进行单目运算x=s2.top();//x取栈顶字母s2.pop();//弹出栈顶字母s1.pop();//弹出栈顶符号s2.push(fan(x));//调用函数}if(s2.size()>=2&&!s1.empty())//如果s1不为空,且s2中至少有2个字母(s1栈中只有一个符号,且为双目运算符){x=s2.top(),s2.pop();//x取栈顶字母y=s2.top(),s2.pop();//y取下一个栈顶fu=s1.top(),s1.pop();//fu取s1栈顶符号s2.push(shuang(x,y,fu));调用函数}}cout<<s2.top()<<endl;//输出答案}return 0;//结束程序 }
6263:布尔表达式相关推荐
- 投入OJ的怀抱~~~~~~~~~~
OpenJudge C20182024 信箱(1) 账号 修改设定 退出小组 管理员 frank 林舒 Dzx someone 李文新 公告 11-05 程序设计与算法(大学先修课) 成员(61910 ...
- 投入OJ的怀抱~~~
OpenJudge 登入 注册 管理员 frank 林舒 Dzx someone 李文新 公告 11-05 程序设计与算法(大学先修课) 成员(85168)查看全部 NOI(题库正在建设中,做题纪录有 ...
- 【NOI OJ】一大波题正在飞来(ˉ▽ ̄~) 我才不是 Ctrl C + Ctrl V 的人呢
OpenJudge 登入 注册 管理员 frank 林舒 Dzx someone 李文新 公告 11-05 程序设计与算法(大学先修课) 成员(61647)查看全部 NOI(题库正在建设中,做题纪录有 ...
- 微软医疗ai_微软ai运行时内部的外观
微软医疗ai Today, I want to wear my software archeology hat, and share with you one story about the AI e ...
- Python学习笔记二:布尔表达式
1 #coding:utf-8 2 #布尔表达式的值只有两个,True和False 3 x = 12.4 4 y = 12.3 5 print x==y #符号'=='用于判断两个数是否相等,这条 ...
- Python学习入门基础教程(learning Python)--3.3.1 Python下的布尔表达式
简单的说就是if要判断condition是真是假,Python和C语言一样非0即真,所以如果if的condition是布尔表达式我们可以用True或者非0数(不可是浮点数)表示真,用False或者0表 ...
- 汇编语言布尔表达式(NOT、AND、OR)
布尔代数(boolean algebra)定义了一组操作,其值为真(true)或假(false).它的发明者是十九世纪中叶的数学家乔治・布尔(George Boole). 在数字计算机发明的早期,人们 ...
- 复杂的动态布尔表达式性能评估(1)--Antlr4实现
前言: 规则引擎中, 往往涉及到多个条件构成了复杂布尔表达式的计算. 对于这类布尔表达式, 一是动态可变的(取决于运营人员的设定), 二是其表达式往往很复杂. 如何快速的计算其表达式的值, 该系列文章 ...
- 天池 在线编程 布尔表达式求值(栈)
文章目录 1. 题目 2. 解题 1. 题目 https://tianchi.aliyun.com/oj/245679029019779851/254275128279634588 给定一个字符串代表 ...
最新文章
- 2021年春季学期-信号与系统-第二次作业参考答案-第八小题
- (001) RN开发之Mac搭建开发环境
- 软件工程实践2017 结队项目——第二次作业
- 加薪方式的真相!你是哪一种?
- Spring Cloud 加盟重量级成员Spring Cloud Alibaba,打造更符合中国国情的微服务体系...
- ccf画图java详细解析_ccfjava答案
- 云炬随笔20170201
- linux spinlock mutex semaphore
- shuffle操作图解以及job-stage-task-partition区别
- centos卸载内核_CentOS 中内核模块的加载和卸载
- Activemq源码、编译、导入idea、源码调试总结
- js中 给json对象添加属性和json数组添加元素
- 滑动切换activity
- 在SharePoint网站中访问Webservice被拒绝的解决方法
- conda创建虚拟环境,拥有多个Anconda版本
- TLS 1.3套件TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256
- windows7:“创建系统修复光盘”
- 显示upnp服务器 sonos,Kodi启用UPnP/DLNA及AirPlay 串流投屏设置教程
- Linux环境关闭开机自启动服务
- 给五子棋加个功能叫悔棋