首页 > 编程知识 正文

主析取范式

时间:2023-05-04 01:35:53 阅读:236924 作者:2639

#include<bits/stdc++.h>using namespace std;stack<char>optr;stack<char>opnd;int cmp[10][10]{{' ','!','!','!','!','<','!','!'},//!{'<','>','>','>','>','<','>','>'},//*{'<','<','>','>','>','<','>','>'},//|{'<','<','<','>','>','<','>','>'},//-{'<','<','<','<','>','<','>','>'},//={'<','<','<','<','<','<','=',' '},//({'>','>','>','>','>',' ','>','>'},//){'<','<','<','<','<','<',' ', '='},//#};int in(char c){int ans;switch(c){case '!':ans=0;break;case '*':ans=1;break;case '|':ans=2;break;case '-':ans=3;break;case '=':ans=4;break;case '(':ans=5;break;case ')':ans=6;break;case '#':ans=7;break;default:ans=8;}return ans;}char precede(char a,char b){int v1=in(a),v2=in(b);return cmp[v1][v2];}char operate(char a,char t,char b){char ans;switch(t){case '*':if(a=='0'||b=='0') ans='0';else ans='1';break;case '|':if(a=='0'&&b=='0') ans='0';else ans='1';break;case '-':if(a=='1'&&b=='0') ans='0';else ans='1';break;case '=':if(a==b) ans='1';else ans='0';}return ans;}int give(string s){optr.push('#');char theta,a,b,e;for(int i=0; i<s.size(); i++){if(in(s[i])==8){opnd.push(s[i]);}else{e=precede(optr.top(),s[i]);if(e=='<'){optr.push(s[i]);}else if(e=='='){optr.pop();}else if(e=='>'){theta=optr.top();optr.pop();b=opnd.top();opnd.pop();a=opnd.top();opnd.pop();opnd.push(operate(a,theta,b));optr.push(s[i]);}else if(e=='!'){optr.pop();a=opnd.top();opnd.pop();if(a-48) opnd.push('0');else opnd.push('1');optr.push(s[i]);}}}theta=optr.top();optr.pop();b=opnd.top();opnd.pop();a=opnd.top();opnd.pop();return operate(a,theta,b);}struct node{char ala;int num;};int main(){int k=0,t=0,a;string s,ss;cin>>s;ss=s;node al[55];for(int i=0; i<s.size(); i++){if(isalpha(s[i])){for(int j=0; j<k; j++){if(al[j].ala==s[i]) t=1;}if(!t){al[k++].ala=s[i];t=0;}}}for(int i=0; i<pow(2,k); i++){a=i;s=ss;for(int j=k-1; j>=0; j--){al[j].num=a%2;a/=2;for(int m=0; m<s.size(); m++){if(s[m]==al[j].ala){if(al[j].num==0) s[m]='0';else s[m]='1';}}}if(give(s)-48) cout<<i<<" ";}return 0;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。