POJ 3295 *** Tautology
2015-11-15 12:40
344 查看
题意:对p q r s t这五个逻辑变量有与K 或A 非N 蕴涵C 同或E的基本操作。给出一串由p q r s t K A N C E组成的表达式,求该表达式是否为永真式。
要求:表达式长度不超过100个字符。
想法:数据类型肯定是用栈,但是我一直在想栈的元素该用什么才能把p q r s t的32个状态统统表示出来,中间用了一次stack<int[32]>这种,但是编译都没通过,于是放弃。
后来看了一下别人的解答,才发现可以枚举p q r s t的值。对每次 p q r s t 的值对表达式求一次值,然后查看表达式的值是否一直为true。
代码如下:
要求:表达式长度不超过100个字符。
想法:数据类型肯定是用栈,但是我一直在想栈的元素该用什么才能把p q r s t的32个状态统统表示出来,中间用了一次stack<int[32]>这种,但是编译都没通过,于是放弃。
后来看了一下别人的解答,才发现可以枚举p q r s t的值。对每次 p q r s t 的值对表达式求一次值,然后查看表达式的值是否一直为true。
代码如下:
#pragma warning(disable:4996) #include<iostream> #include<cstdio> #include<cmath> #include<stack> #include<cstring> #include<sstream> #include<set> #include<string> #include<iterator> #include<vector> #include<map> #include<algorithm> using namespace std; int var[110]; int main() { //freopen("input.txt", "r", stdin); //freopen("output.txt","w",stdout); string str; while (cin >> str, str[0] != '0') { int size = str.size(); int p, q, r, s, t, flag = 1,top; for (p = 0; p < 2; ++p) if (flag)for (q = 0; q < 2; ++q) if (flag)for (r = 0; r < 2; ++r) if (flag)for (s = 0; s < 2; ++s) if (flag)for (t = 0; t < 2; ++t) { memset(var, 0, sizeof(var)); top = 0; int a, b; for (int i = size - 1; i >= 0; --i) switch (str[i]) { case'p':var[top++] = p; break; case'q':var[top++] = q; break; case'r':var[top++] = r; break; case's':var[top++] = s; break; case't':var[top++] = t; break; case'K':a = var[--top]; b = var[--top]; var[top++] = a&b; break; case'A':a = var[--top]; b = var[--top]; var[top++] = a | b; break; case'N':a = var[--top]; var[top++] = 1 - a; break; case'C':a = var[--top]; b = var[--top]; var[top++] = !a | b; break; case'E':a = var[--top]; b = var[--top]; var[top++] = !(a^b); } if (!var[--top])flag = 0; } if (flag)cout << "tautology" << endl; else cout << "not" << endl; } return 0; }
相关文章推荐
- 欢迎使用CSDN-markdown编辑器
- centos7 boot空间不够用的解决方案
- 基于语义的物体检测笔记
- 九度OJ 1339:ACM (排序)
- (ZT)C语言运算符号优先级图表
- 动手动脑之多态与异常处理
- 九度OJ 1339:ACM (排序)
- poj 3468 A Simple Problem with Integers【线段树】区间延迟,区间查询
- Unity3D 委托和事件的优点(一)
- 快学scala习题(二)
- squid反向代理加速度内网web服务器访问速度
- 初探git/phabricator
- 使用契约优先的方式来开发WebService(用到了jaxws-ri),并发布到tomcat中
- 九度OJ 1338:角斗士 (递归、DP)
- 九度OJ 1338:角斗士 (递归、DP)
- 如何让软件绑定计算机硬件
- 计算机中的字,字长,位,字节的概念
- 老子思想与饮食之道
- 九度OJ 1337:寻找最长合法括号序列 (DP)
- 串的定长数据存储表示