借助的是这位大神的解题报告的写法,不愿多敲了。

大致题意:

输入由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相关推荐

  1. 构造法 | 栈 | POJ3295.Tautology

    构造法 | 栈 | POJ3295.Tautology Link:Tautology Description WFF 'N PROOF is a logic game played with dice ...

  2. Tautology(poj3295)(DFS)

    本题中最多5个命题变项:p,q,r,s,t 每个有0,1两种取值,所以总共32种情况,分别枚举即可. 对于每种情况,计算表达式的值,如果有结果为0的则输出not 难点在于如何计算表达式的值,我们采用递 ...

  3. poj 3295 Tautology(经典构造算法题)

    思路:1)使用递归模拟,用备忘录优化,否则超时 另外:学到了一个不用递归即可枚举构造0-1序列的方法 for(i=0;i<32;i++)for(j=0;j<5;j++)arr[j]=(i& ...

  4. E - Tautology(永真式)

    题目描述 WFF 'N PROOF is a logic game played with dice. Each die has six faces representing some subset ...

  5. 【poj 3295】Tautology (栈)

    做法:穷举五个变量的可能取值.对于每种情况,建立一个栈,从右往左遍历字符串,字符代表数字时入栈,代表运算符时取出一定量的数字,运算后把结果压入栈.最后剩下的就是这个运算式的结果了. 在所有的取值下结果 ...

  6. POJ 3295: Tautology 递归的永真式

    原题链接:Tautology 题目大意:p.q.r.s.t是逻辑变量,K.A.N.C.E是逻辑操作,相应的真值表已经给出.要求给定一个逻辑表达式,判断其是否为永真式,即无论其中的逻辑变量取值如何,其结 ...

  7. Competitive Programming 3题解

    题目一览: Competitive Programming 3: The New Lower Bound of Programming Contests(1) Competitive Programm ...

  8. 做acm 需要学的算法

    做acm 需要学的算法 转一个搞ACM需要的掌握的算法.  要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来.  适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什 ...

  9. acm经典题Mark

    著名的北邮ACM推荐50题 POJ推荐50题 1.标记"难"和"稍难"的题目可以看看,思考一下,不做要求,当然有能力的同学可以直接切掉. 2.标记为A and ...

最新文章

  1. 什么是Activity 和 Activity分类
  2. JavaScript高级day02-AM【函数的prototype、显式原型与隐式原型、原型链】
  3. 倒计时1天,BDTC2016最新完整版日程公布
  4. Cloud Prizefight: OpenStack vs. VMware(转)-HA-FT
  5. C#中增量类功能的方式之 继承与扩展
  6. 基于Ogre的DeferredShading(延迟渲染)的实现以及应用
  7. 小米申请雷军签名商标获批
  8. OAuth2.0(基于django2.1.2实现版本)
  9. 【解决IE地址栏不见了问题】
  10. 趣键盘霸榜App Store七天,下一个趣头条诞生?
  11. 解密区块链最强心脏 迅雷链共识算法详解
  12. canvas 实现流星雨特效
  13. ubuntu的gnome桌面重启
  14. 室内陈设设计有必要吗,室内陈设设计要注意什么
  15. Confluence7.4安装
  16. 史上最全MOS管封装管脚外观解读,新手必读!
  17. 记一次服务器被挖矿木马攻击的经历
  18. appium的安装及坑Error: Could not detect Mac OS X Version from sw_vers output,TypeError: Cannot read prope
  19. 二级计算机考证(全)
  20. 国内课题基金英文翻译

热门文章

  1. 做自媒体怎样看书赚钱?靠谱吗?
  2. dubbo 协议层【Protocol】分析
  3. c语言中定义pi为一个符号常量,将π的值定义为符号常量PI
  4. 2015062601 - 书评
  5. final关键字总结
  6. LeetCode 406. Queue Reconstruction by Height 题解(C++)
  7. 在“企业通讯录”的盲区,融云的边界与分寸
  8. ES6的简单的整理与应用
  9. 做短视频用这些神器~ 保证事半功倍
  10. h5仿切水果游戏简单demo代码