poj 2106 Boolean Expressions(字符串bool表达式求值)
来源:互联网 发布:吸血臭虫 知乎 编辑:程序博客网 时间:2024/06/11 22:41
自创奇葩递归写法~~~23333
题目链接:点击打开链接
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <string>using namespace std;//优先级~//1.括号//2.NOT//3.AND//4.OR0//5.从左往右(!是从右往左~)string replacesub(string exp,int s,int ls,string sub){ return exp.substr(0,s)+sub+exp.substr(s+ls,exp.size()-s-ls);}bool booleanexp(string exp){ for(int i=0;i<exp.size();i++) { if(exp[i]=='(') { int bsz=1; int ls=1; while(bsz) { if(exp[i+ls]=='(') bsz++; else if(exp[i+ls]==')') bsz--; ls++; } string subexp=exp.substr(i+1,ls-2); exp=replacesub(exp,i,ls,booleanexp(subexp)?"1":"0"); } } for(int i=exp.size()-1;i>=0;i--) if(exp[i]=='!') exp=replacesub(exp,i,2,exp[i+1]=='1'?"0":"1"); for(int i=0;i<exp.size();i++) if(exp[i]=='&') exp=replacesub(exp,i-1,3,(exp[i-1]=='1'&&exp[i+1]=='1')?"1":"0"),i--; for(int i=0;i<exp.size();i++) if(exp[i]=='|') { exp=replacesub(exp,i-1,3,(exp[i-1]=='1'||exp[i+1]=='1')?"1":"0"),i--; } return exp=="1";}int main(){ int nofcase=1; string reg; while(getline(cin,reg)) { string check; for(int i=0;i<reg.size();i++) { if(reg[i]==' ') continue; else if(reg[i]=='V') check+='1'; else if(reg[i]=='F') check+='0'; else check+=reg[i]; } //cout<<"check :"<<check<<endl; cout<<"Expression "<<nofcase++<<": "<<(booleanexp(check)?'V':'F')<<endl; }}
阅读全文
0 0
- poj 2106 Boolean Expressions(字符串bool表达式求值)
- poj 2106 Boolean Expressions(特殊的表达式求值)
- POJ 2106-Boolean Expressions,双栈运用类似表达式求值!
- Boolean Expressions(表达式求值)
- (栈的应用5.2.2)POJ 2106 Boolean Expressions(表达式求值)
- poj 2106 Boolean Expressions
- POJ 2106 Boolean Expressions
- POJ 2106 Boolean Expressions
- poj 2106 Boolean Expressions
- POJ 2106:Boolean Expressions 计算布尔表达式 - 堆栈
- POJ-2106 Boolean Expressions-!||&计算
- POJ 2106 Boolean Expressions 笔记
- poj 2106 Boolean Expressions 课本代码
- POJ 2106 Boolean Expressions(模拟+LL1)
- POJ---2106-Boolean Expressions(stack)
- POJ 2106 Boolean Expressions(递归算法)
- poj 2106 Boolean Expressions(模拟)
- poj 2106.Boolean Expressions
- 1011. A+B和C (15)——C语言
- 值类型引用类型的传递
- 基本环境搭建
- Quartz教程--快速入门
- Idea各种设置
- poj 2106 Boolean Expressions(字符串bool表达式求值)
- LTE物理传输资源(2)-频带、信道带宽和频点号EARFCN
- Java入门基础知识(一)构造函数,继承,重载与重写
- Mac配置python3.5.2
- linux sed 批量替换字符串
- codevs 1013 求先序排列
- Struts拦截器的小案例
- Quartz教程一--使用Quartz
- 机器学习之最小二乘法:背后的假设和原理