布尔表达式

Posted 鄉勇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了布尔表达式相关的知识,希望对你有一定的参考价值。

时间限制: 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 }

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

以上是关于布尔表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何将c代码转换为布尔表达式?

编译原理—中间代码生成布尔表达式翻译短路计算控制流语句翻译条件语句循环语句

JAVA条件语句之if...else

超强布尔表达式

表达式可以在布尔文字上简化[重复]

5_分支结构