POJ-3295-递归计算表达式
2017-11-07 20:23
344 查看
/* poj-3295-递归模拟 每执行完一个操作,更新下一个可计算的位置n,初始为0 遇到变量,n就等于当前坐标+1,返回变量真假 */ #include<stdio.h> #include<string.h> char wff[105]; int len; bool p,q,r,s,t; int n; bool judge(char op,bool w,bool x){ if(op == 'K'){ return w && x; }else if(op == 'A'){ return w || x; }else if(op == 'C'){ return !w || x; }else if(op == 'E'){ return w == x; } } bool dfs(int i){ if(n == len || i == len){ printf("adadad\n"); return true; } if(wff[i] == 'K' || wff[i] == 'A' || wff[i] == 'C' || wff[i] == 'E'){ bool fi,se; //printf("n = %d\n",n); fi = dfs(i+1);//已经递归更新了下一个可用于计算的位置n,可以输出n看一下 //printf("n = %d\n",n); se = dfs(n); return judge(wff[i],fi,se); }else if(wff[i] == 'N'){ return !dfs(i+1);; }else if(wff[i] == 'p'){ n = i + 1; //printf("n = %d\n",n); return p; }else if(wff[i] == 'q'){ n = i + 1; return q; }else if(wff[i] == 'r'){ n = i + 1; return r; }else if(wff[i] == 's'){ n = i + 1; return s; }else if(wff[i] == 't'){ n = i + 1; return t; } } int main(){ while(scanf("%s",wff) && wff[0] != '0'){ len = strlen(wff); bool flag = true; for(int i1 = 0;i1 <= 1;i1++){ p = i1; for(int i2 = 0;i2 <= 1;i2++){ q = i2; for(int i3 = 0;i3 <= 1;i3++){ r = i3; for(int i4= 0;i4 <= 1;i4++){ s = i4; for(int i5 = 0;i5 <= 1;i5++){ t = i5; n = 0; flag = flag && dfs(0); } } } } } if(flag){ printf("tautology\n"); }else{ printf("not\n"); } //printf("n = %d\n",n);//4 } }
相关文章推荐
- 算法学习之递归--表达式计算(简单计算器)
- POJ NOI0105-33 计算分数加减表达式的值
- ZOJ 1958||POJ 2269 Friends(表达式计算)
- 【POJ 3295】Tautology 前缀式计算
- 递归下降法实现计算表达式
- POJ 3295 - 位运算 + 模拟 +递归
- 递归计算逆波兰表达式
- POJ 3295 递归模拟
- 递归优化 POJ1579 记忆化搜索 剪枝 去掉重复计算
- POJ 3295 后缀表达式
- 一个递归计算数学表达式的函数
- 一个递归计算数学表达式的函数
- poj 2694 逆波兰表达式(递归)
- POJ 1579 解法二用动态规划给递归剪枝,减少重复计算。此题一开始没想到用此法耗费了不少时间。
- 基于二叉树上递归(动规?)的逆波兰表达式(poj)
- C语言练习 表达式的递归计算
- 表达式计算--递归
- POJ 3295 Tautology(递归、构造)
- PL0 表达式的计算(递归子程序法)