东6宿舍灵异事件(0322)
Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 88 Accepted: 31
Description
将军听说最近东6闹鬼了,作为一个无神论者,将军当然不相信。但是这个传言已经泛滥了,许多人都在说这个事情,将军从每个人那里听到一个传言,将军可以容易的就知道这个传言是真还是假,但是当一大堆消息组合起来,将军就不知道了,所以将军就找到了你。
提供两种组合方式:
A&B:代表A和B都为真的时候,A和B组合起来为真,否则为假
A|B:代表A和B里面至少有1个为真的时候,A和B组合起来为真,否则为假
优先级顺序 “括号”>“&”>“|”
例如:a&b|(a|b&c),a=真,b=假,c=真;
那么上式可以这样转化
真&假 | (真|假&真)
假 | (真|假)
假 | 真
真
提供两种组合方式:
A&B:代表A和B都为真的时候,A和B组合起来为真,否则为假
A|B:代表A和B里面至少有1个为真的时候,A和B组合起来为真,否则为假
优先级顺序 “括号”>“&”>“|”
例如:a&b|(a|b&c),a=真,b=假,c=真;
那么上式可以这样转化
真&假 | (真|假&真)
假 | (真|假)
假 | 真
真
Input
有多组测试数据,每组测试数据共两行,第一行是一个逻辑范式,数据不用判错;
接下来三个字符,以空格隔开,分表代表a,b,c的真假(T/F);
接下来三个字符,以空格隔开,分表代表a,b,c的真假(T/F);
Output
对于每一组数据,输出最终的结果(TRUE or FALSE);
Sample Input
a&b|(a|b&c)
T F T
Sample Output
TRUE
Hint
SCPC - ChenYi
1 #include<stdio.h> 2 #include<string.h> 3 4 struct 5 { 6 char ch; 7 int pri; 8 }lpri[5]={{'=',0},{'(',1},{'+',3},{'*',5},{')',6}},rpri[5]={{'=',0},{'(',6},{'+',2},{'*',4},{')',1}}; 9 10 void Change(char *a) 11 { 12 if(*a=='T') 13 *a='1'; 14 else 15 *a='0'; 16 } 17 18 void Transform(char exp[],char a,char b,char c) 19 { 20 int len,i; 21 len=strlen(exp); 22 for(i=0;i<len;i++) 23 { 24 if(exp[i]=='a') 25 exp[i]=a; 26 if(exp[i]=='b') 27 exp[i]=b; 28 if(exp[i]=='c') 29 exp[i]=c; 30 if(exp[i]=='&') 31 exp[i]='*'; 32 if(exp[i]=='|') 33 exp[i]='+'; 34 } 35 } 36 37 int Lpri(char ch) 38 { 39 int i; 40 for(i=0;i<5;i++) 41 { 42 if(ch==lpri[i].ch) 43 { 44 return lpri[i].pri; 45 } 46 } 47 } 48 49 int Rpri(char ch) 50 { 51 int i; 52 for(i=0;i<5;i++) 53 { 54 if(ch==rpri[i].ch) 55 { 56 return rpri[i].pri; 57 } 58 } 59 } 60 61 void expTOpostexp(char exp[],char postexp[]) 62 { 63 int len,top=-1,t=0,i; 64 char op[100]; 65 len=strlen(exp); 66 for(i=0;i<len;) 67 { 68 if(exp[i]=='0'||exp[i]=='1') 69 { 70 postexp[t++]=exp[i++]; 71 } 72 else 73 if(Lpri(op[top])<Rpri(exp[i])||top==-1)//最开始栈顶是 -1 74 { 75 op[++top]=exp[i++]; 76 } 77 else 78 if(Lpri(op[top])>Rpri(exp[i])) 79 { 80 postexp[t++]=op[top--]; 81 } 82 else 83 if(Lpri(op[top])==Rpri(exp[i])) 84 { 85 top--; 86 i++; 87 } 88 } 89 for(i=top;i>-1;i--)//top就是栈顶的指针 90 { 91 postexp[t++]=op[top--]; 92 } 93 postexp[t]='