博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
布尔表达式
阅读量:6999 次
发布时间:2019-06-27

本文共 1934 字,大约阅读时间需要 6 分钟。

时间限制: 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
2 #include
3 #include
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 }

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

转载于:https://www.cnblogs.com/J-william/p/6194510.html

你可能感兴趣的文章