POJ3295 Tautology
借助的是这位大神的解题报告的写法,不愿多敲了。
大致题意:
输入由p、q、r、s、t、K、A、N、C、E共10个字母组成的逻辑表达式,
其中p、q、r、s、t的值为1(true)或0(false),即逻辑变量;
K、A、N、C、E为逻辑运算符,
K --> and: x && y
A --> or: x || y
N --> not : !x
C --> implies : (!x)||y
E --> equals : x==y
问这个逻辑表达式是否为永真式。
PS:输入格式保证是合法的。
代码操作:
1、把变量(p,q,r,s,t)替换成0,1。(替换有规律,见数组num,共32中可能);
2、用栈将字符串倒序当后缀式运算。
3、判断运算完成后栈底元素是否为1,如果不为0跳出输出not。
4、若32种可能都为1,则输出tautology;
以下是代码:
#include <stdio.h>
#include <string.h>
int main()
{char s[105],s1[105],z[105];int top,flat,i,j,k,p;int num[32][5]={1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,1,0,1,1,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,};while(scanf("%s",s),s[0]!='0'){flat=1;p=strlen(s);for(k=0;k<32;k++){top=0;for(i=0;i<p;i++){switch(s[i]){case 'p':s1[i]=num[k][0]+'0';break;case 'q':s1[i]=num[k][1]+'0';break;case 'r':s1[i]=num[k][2]+'0';break;case 's':s1[i]=num[k][3]+'0';break;case 't':s1[i]=num[k][4]+'0';break;default:s1[i]=s[i];break;}}for(i=p-1;i>=0;i--){if(s1[i]=='0'||s1[i]=='1'){z[top]=s1[i];top++;}else if(s1[i]=='K'){z[top-2]=((z[top-2]-'0')&&(z[top-1]-'0'))+'0';top--;}else if(s1[i]=='A'){z[top-2]=((z[top-2]-'0')||(z[top-1]-'0'))+'0';top--;}else if(s1[i]=='C'){z[top-2]=((!(z[top-2]-'0'))||(z[top-1]-'0'))+'0';top--;}else if(s1[i]=='E'){z[top-2]=((z[top-2]-'0')==(z[top-1]-'0'))+'0';top--;}else if(s1[i]=='N'){z[top-1]=(!(z[top-1]-'0'))+'0';}}if(z[0]=='0'){flat=0;break;}}if(flat){printf("tautology\n");}else{printf("not\n");}}return 0;
}
POJ3295 Tautology相关推荐
- 构造法 | 栈 | POJ3295.Tautology
构造法 | 栈 | POJ3295.Tautology Link:Tautology Description WFF 'N PROOF is a logic game played with dice ...
- Tautology(poj3295)(DFS)
本题中最多5个命题变项:p,q,r,s,t 每个有0,1两种取值,所以总共32种情况,分别枚举即可. 对于每种情况,计算表达式的值,如果有结果为0的则输出not 难点在于如何计算表达式的值,我们采用递 ...
- poj 3295 Tautology(经典构造算法题)
思路:1)使用递归模拟,用备忘录优化,否则超时 另外:学到了一个不用递归即可枚举构造0-1序列的方法 for(i=0;i<32;i++)for(j=0;j<5;j++)arr[j]=(i& ...
- E - Tautology(永真式)
题目描述 WFF 'N PROOF is a logic game played with dice. Each die has six faces representing some subset ...
- 【poj 3295】Tautology (栈)
做法:穷举五个变量的可能取值.对于每种情况,建立一个栈,从右往左遍历字符串,字符代表数字时入栈,代表运算符时取出一定量的数字,运算后把结果压入栈.最后剩下的就是这个运算式的结果了. 在所有的取值下结果 ...
- POJ 3295: Tautology 递归的永真式
原题链接:Tautology 题目大意:p.q.r.s.t是逻辑变量,K.A.N.C.E是逻辑操作,相应的真值表已经给出.要求给定一个逻辑表达式,判断其是否为永真式,即无论其中的逻辑变量取值如何,其结 ...
- Competitive Programming 3题解
题目一览: Competitive Programming 3: The New Lower Bound of Programming Contests(1) Competitive Programm ...
- 做acm 需要学的算法
做acm 需要学的算法 转一个搞ACM需要的掌握的算法. 要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来. 适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什 ...
- acm经典题Mark
著名的北邮ACM推荐50题 POJ推荐50题 1.标记"难"和"稍难"的题目可以看看,思考一下,不做要求,当然有能力的同学可以直接切掉. 2.标记为A and ...
最新文章
- 什么是Activity 和 Activity分类
- JavaScript高级day02-AM【函数的prototype、显式原型与隐式原型、原型链】
- 倒计时1天,BDTC2016最新完整版日程公布
- Cloud Prizefight: OpenStack vs. VMware(转)-HA-FT
- C#中增量类功能的方式之 继承与扩展
- 基于Ogre的DeferredShading(延迟渲染)的实现以及应用
- 小米申请雷军签名商标获批
- OAuth2.0(基于django2.1.2实现版本)
- 【解决IE地址栏不见了问题】
- 趣键盘霸榜App Store七天,下一个趣头条诞生?
- 解密区块链最强心脏 迅雷链共识算法详解
- canvas 实现流星雨特效
- ubuntu的gnome桌面重启
- 室内陈设设计有必要吗,室内陈设设计要注意什么
- Confluence7.4安装
- 史上最全MOS管封装管脚外观解读,新手必读!
- 记一次服务器被挖矿木马攻击的经历
- appium的安装及坑Error: Could not detect Mac OS X Version from sw_vers output,TypeError: Cannot read prope
- 二级计算机考证(全)
- 国内课题基金英文翻译