poj 3295 Tautology
2016-07-27 14:49
369 查看
题目链接:点击打开链接
Description
WFF 'N PROOF is a logic game played with dice. Each die has six faces representing some subset of the possible symbols K, A, N, C, E, p, q, r, s, t. A Well-formed formula (WFF) is any string of these symbols obeying the following
rules:
p, q, r, s, and t are WFFs
if w is a WFF, Nw is a WFF
if w and x are WFFs, Kwx, Awx, Cwx, and Ewx are WFFs.
The meaning of a WFF is defined as follows:
p, q, r, s, and t are logical variables that may take on the value 0 (false) or 1 (true).
K, A, N, C, E mean and, or, not, implies, and equals as defined in the truth table below.
A tautology is a WFF that has value 1 (true) regardless of the values of its variables. For example, ApNp is a tautology because it is true regardless of the value of p. On the other hand, ApNq is
not, because it has the value 0 for p=0, q=1.
You must determine whether or not a WFF is a tautology.
Input
Input consists of several test cases. Each test case is a single line containing a WFF with no more than 100 symbols. A line containing 0 follows the last case.
Output
For each test case, output a line containing tautology or not as appropriate.
Sample Input
Sample Output
Description
WFF 'N PROOF is a logic game played with dice. Each die has six faces representing some subset of the possible symbols K, A, N, C, E, p, q, r, s, t. A Well-formed formula (WFF) is any string of these symbols obeying the following
rules:
p, q, r, s, and t are WFFs
if w is a WFF, Nw is a WFF
if w and x are WFFs, Kwx, Awx, Cwx, and Ewx are WFFs.
The meaning of a WFF is defined as follows:
p, q, r, s, and t are logical variables that may take on the value 0 (false) or 1 (true).
K, A, N, C, E mean and, or, not, implies, and equals as defined in the truth table below.
Definitions of K, A, N, C, and E |
w x | Kwx | Awx | Nw | Cwx | Ewx |
1 1 | 1 | 1 | 0 | 1 | 1 |
1 0 | 0 | 1 | 0 | 0 | 0 |
0 1 | 0 | 1 | 1 | 1 | 0 |
0 0 | 0 | 0 | 1 | 1 | 1 |
not, because it has the value 0 for p=0, q=1.
You must determine whether or not a WFF is a tautology.
Input
Input consists of several test cases. Each test case is a single line containing a WFF with no more than 100 symbols. A line containing 0 follows the last case.
Output
For each test case, output a line containing tautology or not as appropriate.
Sample Input
ApNp ApNq 0
Sample Output
tautology not
题目大意:判断是否为永真
输入由p、q、r、s、t、K、A、N、C、E共10个字母组成的逻辑表达式, K --> and: x && y A --> or: x || y N --> not : !x C --> implies : (!x)||y E --> equals : x==y
其中p q r s t 的真假要假设,输入字符串,判断其是否为永真式
基本思路:将5个字母用5个for循环假设其真假值,将字符串逆序判断,存入栈中,最后会只剩下一个值,判断是否为真.
注 每一个假设都使字符串为真时才是永真式
<span style="font-size:18px;">#include <iostream> #include<cstdio> #include<cstring> #include<stack> using namespace std; int p,q,r,s,t; stack<int > h; char str[1000]; char a[1000]; bool ch(char c) { switch(c) { case 'p': h.push(p); return true; case 'q': h.push(q); return true; case 'r': h.push(r); return true; case 's': h.push(s); return true; case 't': h.push(t); return true; } return false; } void luoji(char c) { switch(c) { case 'K' : { int x=h.top(); h.pop(); int y=h.top(); h.pop(); h.push(x&&y); return ; } case 'A' : { int x=h.top(); h.pop(); int y=h.top(); h.pop(); h.push(x||y); return ; } case 'N' : { int x=h.top(); h.pop(); h.push(!x); return ; } case 'C' : { int x=h.top(); h.pop(); int y=h.top(); h.pop(); h.push((!x)||y); return ; } case 'E' : { int x=h.top(); h.pop(); int y=h.top(); h.pop(); h.push(x==y); return ; } } } int f() { int len=strlen(str); for( p=0; p<=1; p++) { for( q=0; q<=1; q++) { for( r=0; r<=1; r++) { for( s=0; s<=1; s++) { for(t=0; t<=1; t++) { for(int i=len-1; i>=0; i--) { if(!ch(str[i])) { luoji(str[i]); } } int ans=h.top(); if(!ans) { return 0; } } } } } } return 1; } int main() { while(cin>>str&&str[0]!='0') { int d=f(); if(d==0)printf("not\n"); else printf("tautology\n"); } return 0; }</span>
相关文章推荐
- cache的基本概念
- log4j日志配置详解
- Uva 10247 (组合计数)
- Android Studio实现代码混淆
- 色彩空间转换
- POJ 1001(大数相乘)
- 搭建struts2环境
- Android中Calendar类的用法总结
- 【iOS】Masonry使用案例讲解
- 浅析Java验证码生成库JCaptcha
- 【POJ】2503 - Babelfish(STL)
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 发放救济金
- 203. Remove Linked List Elements
- android下大文件分割上传
- k-means和bp神经网络要点总结
- 用户级线程和内核级线程
- Matlab 和 C++混合编程
- time wait
- Android 5 消息机制源码分析
- 字符数字之间的转换