布尔表达式

时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold

题目描述 Description

给出一个布尔表达式,计算其值。

我们用T表示[真],F表示[假],&表示运算 逻辑[与],|表示运算 逻辑[或]

如果你不是很清楚 逻辑[与] 和 逻辑[或] 的含义,下面给出了运算表:

A    B    A&B    A|B

T    T       T        T

T    F       F        T

F    T       F        T

F    F       F        F

运算符优先级:

允许使用圆括号调整优先级,优先计算圆括号中的表达式,在同层,&运算符的优先级要高于|的优先级。

输入描述 Input Description

第一行一个整数n,表示数据组数。

接下来每组数据占一行,为一个布尔表达式。

输出描述 Output Description

输出共n行,分别表示每组数据的计算结果,每行输出应为T或F。(有回车)

样例输入 Sample Input

3

T&F

F&(F&T|F)

F&F|T

样例输出 Sample Output

F

F

T

数据范围及提示 Data Size & Hint

对于前30%的数据,n=1。

对于100%的数据,n<=1000,任意表达式长度l<=1000,输入数据保证合法。

代碼實現:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 int n,l,fl[3000],a,b;
 6 char ch[6000];
 7 int main(){
 8     scanf("%d",&n);
 9     while(n--){
10         scanf("%s",ch);fl[0]=0;
11         l=strlen(ch);
12         for(int i=0;i<=l;i++){
13             if(ch[i]==‘|‘||ch[i]==‘&‘||ch[i]==‘(‘) fl[++fl[0]]=ch[i];
14             if(ch[i]==‘T‘) fl[++fl[0]]=1;
15             if(ch[i]==‘F‘) fl[++fl[0]]=0;
16             if(ch[i]==‘)‘||i==l){
17                 a=b=fl[0];
18                 while(fl[a]!=‘(‘&&a>0) a--;
19                 for(int j=a+1;j<=b;j++){
20                     if(fl[j]==‘&‘){
21                         fl[j-1]=fl[j-1]&fl[j+1];
22                         for(int k=j;k<=b-2;k++) fl[k]=fl[k+2];
23                         b-=2;j-=2;
24                     }
25                 }
26                 for(int j=a+1;j<=b;j++){
27                     if(fl[j]==‘|‘){
28                         fl[j-1]=fl[j-1]|fl[j+1];
29                         for(int k=j;k<=b-2;k++) fl[k]=fl[k+2];
30                         b-=2;j-=2;
31                     }
32                 }
33                 fl[0]=a;fl[a]=fl[a+1];
34             }
35         }
36         if(fl[1]) printf("T\n");
37         else printf("F\n");
38     }
39     return 0;
40 }

因為是多組數據,所以不要忘了數組重置。

时间: 2024-10-06 16:24:28

布尔表达式的相关文章

超强布尔表达式

/*超强布尔表达式 * 1.“与”运算符 *   if((左侧条件==true)&&(右侧条件==true)){//在这里执行相关代码} * 2.“或”运算符 *   if((左侧条件==false)||(右侧条件==true)){/在这里执行行馆代码} * 3.“非”运算符 *   int类型    if(value!=value2){//在这里执行相关代码}      *   String类型 if(!value.equals("canon")){//在这里执行代码

布尔表达式与条件判断

布尔类型 数值的比较-相等性:是否相等?==       是否不相等?!= 数值的比较-大小比较 字符串的比较-相等性 字符串的比较-大小比较 ASCII码值来比较 in和not in,统一适用于字符串 布尔表达式 逻辑条件:且  或  不 逻辑操作:and  or   not 流程控制 程序流程控制的基本方式:条件判断和循环 条件判断:else语句     elif语句 判断条件是 复合表达式 条件语句块里还有条件语句:条件折行可以用   \

布尔表达式和选择结构

基本运算符一览表 关系运算符 下面表达式的运行结果: 2<3 345.5<=100 12<>10 设x为整型变量 表示x大于10的表达式为: x>10 表示x小于60的表达式为: x<60 表示x既大于10且小于60的表达式为: (x>10) and (x<60) 注意:其运算结果只能为True或False 逻辑运算符 写出表达式 整数x是偶数 if x mod 2=0 then 写出一个数x既能被3整除又能被5整除的表达式 if (x mod 3=0) a

C编译器剖析_5.1 中间代码生成及优化_布尔表达式的翻译

5.2  中间代码生成与优化_布尔表达式的翻译 我们仍然按照语法分析和语义检查时的思路,先讨论表达式的翻译,再处理语句.表达式从概念上来说,可分为算术表达式和布尔表达式,在一些编程语言(例如Java)中对这两者是有严格区分的,算术表达式的结果是整数或浮点数,而布尔表达式的结果是逻辑上的真或假.布尔是英国数学家,由于布尔较早进行了关于"与或非"逻辑运算的研究,为了纪念这位先驱,在Java中引入了关键字boolean,而在C++中引入了bool关键字来表达逻辑上的真或假.C语言中并没有专门

9.11 给定一个布尔表达式,由0、1、&amp;、|、^等符号组成,以及一个想要的布尔结果result,实现一个函数,算出有几种括号的放法可使该表达式得出result的值。

思路: 枚举分割点递归求解,可用DP优化. 注意递归终止条件. 注意 ^ & | 三种情况统计的不同. import java.util.HashMap; import java.util.Map; public class Solution { int countR(String terms, boolean result, int start, int end, Map<String, Integer> cache) { String key = "" + re

Python基础知识进阶(五---2)----程序基本结构、简单分支、异常处理、三大实例分析、基本循环结构、通用循环构造方法、死循环\嵌套循环、布尔表达式

上一篇随笔写的内容有点多了,决定分成两节,不然自己看的时候也头疼. 三者最大实例: 分支结构可以改变程序的控制流,算法不再是单调的一步步顺序执行. 假设:以找出三个数字中最大者的程序设计为例. 输入:三个数值. 处理:三者最大算法 输出:打印最大值 计算机怎么能确定哪个是计算机输入的最大值呢? 策略1:通盘比较 将每个值与其他所有值比较以确定最大值. if x1>=x2 and x1>=x3: max = x1 elif x2>=x1 and x2>= x3: max = x2 e

go语言学习十二 - 布尔表达式采用短路逻辑

package main import "fmt" func main() { //运行结果:a if true || b() { //go 的 if 判断采用短路求值,值已经确定后续的表达式不会计算也不会被调用 fmt.Println("a") } //运行结果:ba if or(true, b()) { //函数的参数必须被即时求值的 fmt.Println("a") } //运行结果:a if orfunc(true, b) { //传入函

Apple Swift编程语言新手教程

Apple Swift编程语言新手教程 作者: 日期: gashero 2014-06-03 FROM:http://gashero.iteye.com/blog/2075324 文件夹 1   简单介绍 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 7   枚举与结构 1   简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的

将MySQL去重操作优化到极致之三弹连发(一):巧用索引与变量

元旦假期收到阿里吴老师来电,被告知已将MySQL查重SQL优化到极致:100万原始数据,其中50万重复,把去重后的50万数据写入目标表只需要9秒钟.这是一个惊人的数字,要知道仅是insert 50万条记录也需要些时间的.于是来了兴趣,自己实验.思考.总结做了一遍. 一.问题提出        源表t_source结构如下:item_id int,created_time datetime,modified_time datetime,item_name varchar(20),other var