构造法
Posted Mel年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造法相关的知识,希望对你有一定的参考价值。
poj3295
题目不难,就是题意有点难理解(英语不好啊...)
题目的意思是一个式子只有pqrst和KANCE组成(一开始理解成小写字母都是变量了,不知道该如何枚举了),然后判断式子是否是永真式
用栈来进行计算,遇到变量入栈,遇到操作符取出栈中元素,运算结果再入栈,最后栈中剩余的结果就是最终计算的结果。
#include <iostream> #include <cstdio> #include <stack> #include <cstring> using namespace std; stack<int> s; int pp,qq,rr,ss,tt; bool isvalue(char a) { switch(a) { case ‘p‘:s.push(pp);return true; case ‘q‘:s.push(qq);return true; case ‘r‘:s.push(rr);return true; case ‘s‘:s.push(ss);return true; case ‘t‘:s.push(tt);return true; } return false; } void operators(char op) { switch(op) { case ‘K‘: { int x=s.top(); s.pop(); int y=s.top(); s.pop(); s.push(x&&y); break; } case ‘A‘: { int x=s.top(); s.pop(); int y=s.top(); s.pop(); s.push(x||y); break; } case ‘C‘: { int x=s.top(); s.pop(); int y=s.top(); s.pop(); s.push((!x)||y); break; } case ‘E‘: { int x=s.top(); s.pop(); int y=s.top(); s.pop(); s.push(x==y); break; } case ‘N‘: { int x=s.top(); s.pop(); s.push(!x); x=s.top(); //printf("re:%d\n",x); break; } } return; } int main() { char a[110]; while(cin>>a&&a[0]!=‘0‘) { int len = strlen(a); bool flag=1; for(pp=0;pp<=1;pp++) { for(qq=0;qq<=1;qq++) { for(rr=0;rr<=1;rr++) { for(ss=0;ss<=1;ss++) { for(tt=0;tt<=1;tt++) { for(int i=len-1;i>=0;i--) { if(!isvalue(a[i])) operators(a[i]); } flag=s.top(); s.pop(); if(!flag) break; } if(!flag) break; } if(!flag) break; } if(!flag) break; } if(!flag) break; } if(flag) cout<<"tautology"<<endl; else cout<<"not"<<endl; } }
以上是关于构造法的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段
创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的载重量。 编写两个构造方法:一个没有(代码片段