描述

输入一个布尔表达式,请你输出它的真假值。
比如:( 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:布尔表达式相关推荐

  1. 投入OJ的怀抱~~~~~~~~~~

    OpenJudge C20182024 信箱(1) 账号 修改设定 退出小组 管理员 frank 林舒 Dzx someone 李文新 公告 11-05 程序设计与算法(大学先修课) 成员(61910 ...

  2. 投入OJ的怀抱~~~

    OpenJudge 登入 注册 管理员 frank 林舒 Dzx someone 李文新 公告 11-05 程序设计与算法(大学先修课) 成员(85168)查看全部 NOI(题库正在建设中,做题纪录有 ...

  3. 【NOI OJ】一大波题正在飞来(ˉ▽ ̄~) 我才不是 Ctrl C + Ctrl V 的人呢

    OpenJudge 登入 注册 管理员 frank 林舒 Dzx someone 李文新 公告 11-05 程序设计与算法(大学先修课) 成员(61647)查看全部 NOI(题库正在建设中,做题纪录有 ...

  4. 微软医疗ai_微软ai运行时内部的外观

    微软医疗ai Today, I want to wear my software archeology hat, and share with you one story about the AI e ...

  5. Python学习笔记二:布尔表达式

    1 #coding:utf-8 2 #布尔表达式的值只有两个,True和False 3  x = 12.4 4 y = 12.3 5  print x==y #符号'=='用于判断两个数是否相等,这条 ...

  6. Python学习入门基础教程(learning Python)--3.3.1 Python下的布尔表达式

    简单的说就是if要判断condition是真是假,Python和C语言一样非0即真,所以如果if的condition是布尔表达式我们可以用True或者非0数(不可是浮点数)表示真,用False或者0表 ...

  7. 汇编语言布尔表达式(NOT、AND、OR)

    布尔代数(boolean algebra)定义了一组操作,其值为真(true)或假(false).它的发明者是十九世纪中叶的数学家乔治・布尔(George Boole). 在数字计算机发明的早期,人们 ...

  8. 复杂的动态布尔表达式性能评估(1)--Antlr4实现

    前言: 规则引擎中, 往往涉及到多个条件构成了复杂布尔表达式的计算. 对于这类布尔表达式, 一是动态可变的(取决于运营人员的设定), 二是其表达式往往很复杂. 如何快速的计算其表达式的值, 该系列文章 ...

  9. 天池 在线编程 布尔表达式求值(栈)

    文章目录 1. 题目 2. 解题 1. 题目 https://tianchi.aliyun.com/oj/245679029019779851/254275128279634588 给定一个字符串代表 ...

最新文章

  1. 2021年春季学期-信号与系统-第二次作业参考答案-第八小题
  2. (001) RN开发之Mac搭建开发环境
  3. 软件工程实践2017 结队项目——第二次作业
  4. 加薪方式的真相!你是哪一种?
  5. Spring Cloud 加盟重量级成员Spring Cloud Alibaba,打造更符合中国国情的微服务体系...
  6. ccf画图java详细解析_ccfjava答案
  7. 云炬随笔20170201
  8. linux spinlock mutex semaphore
  9. shuffle操作图解以及job-stage-task-partition区别
  10. centos卸载内核_CentOS 中内核模块的加载和卸载
  11. Activemq源码、编译、导入idea、源码调试总结
  12. js中 给json对象添加属性和json数组添加元素
  13. 滑动切换activity
  14. 在SharePoint网站中访问Webservice被拒绝的解决方法
  15. conda创建虚拟环境,拥有多个Anconda版本
  16. TLS 1.3套件TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256
  17. windows7:“创建系统修复光盘”
  18. 显示upnp服务器 sonos,Kodi启用UPnP/DLNA及AirPlay 串流投屏设置教程
  19. Linux环境关闭开机自启动服务
  20. 给五子棋加个功能叫悔棋

热门文章

  1. 第5堂音频课:发音词串自学方法示范
  2. String转Map
  3. django之静态文件及数据库
  4. 利用SpringMVC的AOP来实现后台系统的操作日志记录
  5. uni-app 实现轮播图(完整版)
  6. vue判断数组是否为空
  7. ~4= -5 怎么来的
  8. 整理了上千个热门的 Python 工具库,涵盖24个大方向!
  9. formatter 作用
  10. excel多级表头存入mysql_一种多个多层表头的表格在数据库中的存储及其访问方法与流程...