poj-3295 Tautology
http://poj.org/problem?id=3295
借助的是大神的解题报告的写法。
大致题意:
输入由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<string.h>
#include<stdio.h>
const int maxn=120;
int sta[maxn]; //数组模拟堆栈
char str[maxn];
int p,q,r,s,t;
void doit()
{int top=0;int len=strlen(str);for(int i=len-1;i>=0;i--){if(str[i]=='p') sta[top++]=p;else if(str[i]=='q') sta[top++]=q;else if(str[i]=='r') sta[top++]=r;else if(str[i]=='s') sta[top++]=s;else if(str[i]=='t') sta[top++]=t;else if(str[i]=='K'){int t1=sta[--top];int t2=sta[--top];sta[top++]=(t1&&t2);}else if(str[i]=='A'){int t1=sta[--top];int t2=sta[--top];sta[top++]=(t1||t2);}else if(str[i]=='N'){int t1=sta[--top];sta[top++]=(!t1);}else if(str[i]=='C'){int t1=sta[--top];int t2=sta[--top];if(t1==1&&t2==0) sta[top++]=0;else sta[top++]=1;}else if(str[i]=='E'){int t1=sta[--top];int t2=sta[--top];if((t1==1&&t2==1)||(t1==0&&t2==0)) sta[top++]=1;else sta[top++]=0;}}
}bool solve()
{ //5重循环,枚举2^5 32种可能 假设都满足 return 1 for(p=0;p<2;p++)for(q=0;q<2;q++)for(r=0;r<2;r++)for(s=0;s<2;s++)for(t=0;t<2;t++){doit();if(sta[0]==0)return 0;}return 1;
}int main()
{while(scanf("%s",&str)){if(strcmp(str,"0")==0)break;if(solve()) printf("tautology\n");else printf("not\n");}return 0;
}
转载于:https://www.cnblogs.com/ldxsuanfa/p/9954873.html
poj-3295 Tautology相关推荐
- poj 3295 Tautology(经典构造算法题)
思路:1)使用递归模拟,用备忘录优化,否则超时 另外:学到了一个不用递归即可枚举构造0-1序列的方法 for(i=0;i<32;i++)for(j=0;j<5;j++)arr[j]=(i& ...
- POJ 3295: Tautology 递归的永真式
原题链接:Tautology 题目大意:p.q.r.s.t是逻辑变量,K.A.N.C.E是逻辑操作,相应的真值表已经给出.要求给定一个逻辑表达式,判断其是否为永真式,即无论其中的逻辑变量取值如何,其结 ...
- 【poj 3295】Tautology (栈)
做法:穷举五个变量的可能取值.对于每种情况,建立一个栈,从右往左遍历字符串,字符代表数字时入栈,代表运算符时取出一定量的数字,运算后把结果压入栈.最后剩下的就是这个运算式的结果了. 在所有的取值下结果 ...
- php验证码百度ocr识别,利用百度OCR实现验证码自动识别
在爬取网站的时候都遇到过验证码,那么我们有什么方法让程序自动的识别验证码呢?其实网上已有很多打码平台,但是这些都是需要money.但对于仅仅爬取点数据而接入打码平台实属浪费.所以百度免费ocr正好可以 ...
- poj日记(3295)
转载:https://www.cnblogs.com/kuangbin/archive/2012/08/13/2636855.html Description WFF 'N PROOF is a lo ...
- POJ ZOJ题目分类
POJ,ZOJ题目分类(多篇整合版,分类很细致,全面) 标签: 题目分类POJ整理 2015-04-18 14:44 1672人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ACM资料(5) ...
- POJ,ZOJ题目分类(多篇整合版,分类很细致,全面)
水题: 3299,2159,2739,1083,2262,1503,3006,2255,3094 初级: 一.基本算法: (1)枚举 (1753,2965) (2)贪心(13 ...
- NOIP 好题推荐(DP+搜索+图论)POJ ZOJ
NOIP好题推荐(DP+搜索+图论)POJ ZOJ 1370 Gossiping (数论->模线性方程有无解的判断)+(图论->DFS) 1090 Chain ->格雷码和二进制码 ...
- POJ 3268 D-Silver Cow Party
http://poj.org/problem?id=3268 Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...
- poj 2559 Largest Rectangle in a Histogram 栈
// poj 2559 Largest Rectangle in a Histogram 栈 // // n个矩形排在一块,不同的高度,让你求最大的矩形的面积(矩形紧挨在一起) // // 这道题用的 ...
最新文章
- 计算机程序的思维逻辑 (63) - 实用序列化: JSON/XML/MessagePack
- python接口测试demo_python http接口自动化测试简单demo
- 二叉树的遍历(算法导论第三版12.1-4)(包含先序遍历,后序遍历和中序遍历)
- 软件工程汇编程序设计——分支程序实验,循环程序实验,综合程序设计实验
- numpy使用where函数定位满足条件的下标
- 安装oracle10g程序异常终止,win7系统安装oracle10g提示程序异常终止的解决方法
- 嵌入式linux led驱动有几种写法,嵌入式Linux字符驱动LED灯设计
- 【排列组合】ZSC1076: 数学、不容易系列之三——考新郎
- sgu 139 Help Needed!
- PAIP.ASP重复INCLUDE包含引起的重定义错误解决方案
- 易班显示服务器错误,易班常见问题汇总
- 通用接口测试用例设计
- 善用win7中的资源监视器
- pdo_mysql扩展库_MySQL数据库之PDO扩展
- 京东双11准点秒杀脚本
- mysql存储过程和mysql函数
- 设置谷歌浏览器安全级别
- Kafka常用shell脚本命令
- Uncaught TypeError: Cannot read property ‘then‘ of undefined
- vue发送请求时遇到index.vue?6ced:90 Uncaught (in promise) TypeError: Cannot read properties of undefined