poj3295

来源:互联网 发布:支持一夫多妻知乎 编辑:程序博客网 时间:2024/05/18 00:31

类似于表达式求值,但是更加简单,仅仅是进行逻辑运算而已,其中非的优先级最高,其他的运算优先级都一样。同时要有一点是要进行枚举,一共p,q,r,s,t 5个

变量,分别取0,1则有2^5种情况,分别运算 ,若全为真,则记为永真式。

#include<iostream>#include<string>#include<stack>using namespace std;bool Judge(int p,int q,int r,int s,int t,string st){stack<int> s_num;int buff_1,buff_2;string::size_type n = st.size();for(n=n-1;n!=-1;n--){if(st[n]<='t'&&st[n]>='p'){switch(st[n]){case 't':s_num.push(t);continue;case 's':s_num.push(s);continue;case 'r':s_num.push(r);continue;case 'q':s_num.push(q);continue;case 'p':s_num.push(p);continue;}}else{if(st[n]=='N'){buff_1 = s_num.top();s_num.pop();s_num.push(!buff_1);}elseif(st[n]=='A'){buff_1 = s_num.top();s_num.pop();buff_2 = s_num.top();s_num.pop();s_num.push(buff_2||buff_1);}elseif(st[n]=='K'){buff_1 = s_num.top();s_num.pop();buff_2 = s_num.top();s_num.pop();s_num.push(buff_2&&buff_1);}elseif(st[n]=='E'){buff_1 = s_num.top();s_num.pop();buff_2 = s_num.top();s_num.pop();s_num.push(buff_2==buff_1);}else{buff_1 = s_num.top();s_num.pop();buff_2 = s_num.top();s_num.pop();s_num.push((!buff_1)||buff_2);}}}//cout<<s_num.top()<<endl;if(!s_num.top())return false;return true;}int main(){string st;while(cin>>st){string::size_type i = 0;if(st[i]=='0')break;int p(0),q(0),r(0),s(0),t(0),flag(0);for(p=0;p!=2;p++){for(q=0;q!=2;q++){for(r=0;r!=2;r++){for(s=0;s!=2;s++){for(t=0;t!=2;t++){if(!Judge(p,q,r,s,t,st)){flag=1;}}if(flag==1)break;}if(flag==1)break;}if(flag==1)break;}if(flag==1)break;}if(flag==1)cout<<"not"<<endl;elsecout<<"tautology"<<endl;}return 0;}


原创粉丝点击