• 栈/POJ2395(判断是否为恒真式)


    题目:

    p q r s t是变量

    N表示非:如Nr

    E表示是否相等:如Ers = r==s

    A表示或:如Ars = r||s

    K表示与:如Krs = r&&s

    C表示推导:Crs= !r || s

    算法:

    只有5个变量,枚举0~31,每位分别是p q r s t的值,看每次计算的值是不是true

    从字符串结尾开始入栈:

    是变量则入栈

    是操作符则出栈计算完成后再入栈

    最后看栈顶就可以了

    Sample Input
    ApNp
    ApNq
    0

    Sample Output
    tautology
    not

    #include <stack>
    using namespace std;
    int main(int argc, char* argv[])
    {
    	//freopen("i:\\t.txt","r",stdin);
    	char str[128];
    	bool val[5];
    	bool t,t1,t2;
    	memset(val,false,sizeof(val));
    	while(scanf("%s",str)!=EOF){
    		if(!strcmp(str,"0"))return 1;
    		stack<bool> st;
    		for(int v = 0; v<32;v++){
    		for(int k = 0;k<5;k++)
    		val[k]=(v>>k)&1;
    	
    		for(int i=strlen(str)-1;i>=0;i--){
    			switch(str[i]){
    			case 'p':
    			case 'q':
    			case 'r':
    			case 's':
    			case 't':
    				st.push(val[str[i]-'p']);
    				break;
    			case 'N':
    				t = st.top();
    				st.pop();
    				st.push(!t);
    				break;
    			
    			case 'E':
    				t1=st.top();
    				st.pop();
    				t2=st.top();
    				st.pop();
    				st.push(t1==t2);
                    break;
    			case 'A':
    				t1=st.top();
    				st.pop();
    				t2=st.top();
    				st.pop();
    				st.push(t1||t2);
                    break;
    			case 'K':
    				t1=st.top();
    				st.pop();
    				t2=st.top();
    				st.pop();
    				st.push(t1 && t2);
                    break;
    			case 'C':
    				t1=st.top();
    				st.pop();
    				t2=st.top();
    				st.pop();
    				st.push(t1 || !t2);
                    break;
    			}
    			
    		
    		}
    			if(!st.top())break;
    		}
    		if(!st.top())printf("not\n");
    		else printf("tautology\n");
    	}
    	return 1;
    }
  • 相关阅读:
    Spring基础知识点总结
    秒懂设计模式--代理模式(proxy)
    秒懂设计模式--工厂模式
    秒懂设计模式--适配器模式
    秒懂设计模式--装饰者模式
    秒懂设计模式--观察者模式
    单例模式的几种实现
    springboot2.0+spring cloud+eureka搭建微服务步骤
    字符串排序算法
    bitbucket的简单使用
  • 原文地址:https://www.cnblogs.com/yangyh/p/2072497.html
Copyright © 2020-2023  润新知