POJ 3295 Tautology
来源:互联网 发布:网络销售是卖啥的 编辑:程序博客网 时间:2024/05/16 19:51
这道题是让判断一个MMF是否为永真式,所以要枚举每个变量的值,然后用求前缀表达式的方式,用递归求值,但是这道题有两个特别诡异的错误调试了很久,看了讨论区才突然明白是怎么回事。
在递归的过程中我使用的是work()函数进行求值,然后使用了语句return work()&&work()然而这个语句是有问题的,在C++当中,如果第一个work()的返回值是0,那么后边的work()函数就不会被执行,所以应该在前面用参数来把值暂时存下来。
另一个问题是我不小心把两个参数设置成了临时变量,导致求完第一个参数之后,求第二个参数的值的同时把第一个参数的值也给改变了,细节上的问题还是总结总结多多注意!
#include <iostream>#include <cstring>#include <cstdio>using namespace std;#define maxn 105char str[maxn]={0};int p,q,r,s,t;int k = 0;bool work(){ int arg1,arg2; switch(str[k++]){ case 'p': return p; case 'q': return q; case 'r': return r; case 's': return s; case 't': return t; case 'K': arg1 = work(); arg2 = work(); return arg1&&arg2; case 'A': arg1 = work(); arg2 = work(); return arg1||arg2; case 'N': return !work(); case 'C': arg1 = work(); arg2 = work(); if(arg1&&(!arg2)) return 0; return 1; case 'E': arg1 = work(); arg2 = work(); return !(arg1^arg2); default: break; }}bool judge(){ 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){ k = 0; if(!work()) return false; } } } } } return true;}int main(){ while(scanf("%s",&str)){ if(str[0] == '0') break; if(judge()){ printf("tautology\n"); } else{ printf("not\n"); } memset(str,0,sizeof(str)); } return 0;}
0 0
- POJ 3295 Tautology 模拟
- POJ-3295-Tautology
- POJ 3295 Tautology
- POJ 3295 Tautology
- POJ 3295 Tautology
- POJ 3295 Tautology(模拟)
- poj 3295 Tautology
- POJ 3295 Tautology
- POJ 3295 Tautology
- poj 3295 Tautology
- poj-3295 Tautology
- POJ 3295 -Tautology
- POJ 3295 Tautology
- POJ:题号 3295------tautology
- Poj 3295 Tautology
- Tautology POJ 3295
- POJ 3295 Tautology
- poj 3295 Tautology
- html5学习记录02:表格table
- iOS应用架构谈(二):View层的组织和调用方案(中)
- hadoop入门编程
- BZOJ 2424: [HAOI2010]订货|费用流
- CloseHandle TerminateThread ExitThread的区别
- POJ 3295 Tautology
- CloudFlare防护下的破绽:寻找真实IP的几条途径
- 【Codeforces 163E】E-Government
- dataTables 传值 《二》
- 各大浏览器 CSS Hack 收集
- iOS应用架构谈(二):View层的组织和调用方案(下)
- 怎样对EDIUS屏幕进行自定义布局
- listview和edittext一起使用时弹出软键盘问题
- 项目小结