0804 OpenJ#1108 Boolean Expressions
来源:互联网 发布:java声明银行账户类锁 编辑:程序博客网 时间:2024/06/09 15:32
摘要:用递归方法解决递归定义的问题
原题目:
Boolean Expressions
where V is for True, and F is for False. The expressions may include the following operators: ! for not , & for and, | for or , the use of parenthesis for operations grouping is also allowed.
To perform the evaluation of an expression, it will be considered the priority of the operators, the not having the highest, and the or the lowest. The program must yield V or F , as the result for each expression in the input file.
The number of expressions in the input file is variable and will never be greater than 20. Each expression is presented in a new line, as shown below.
Use the same format as that shown in the sample output shown below.
( V | V ) & F & ( F| V)!V | V & V & !F & (F | V ) & (!F | F | !V & V)(F&F|V|!V&!F&!(F|F&V))
Expression 1: FExpression 2: VExpression 3: V
来源: http://cxsjsxmooc.openjudge.cn/2017t2summerw3/1/
题目理解:将表达式用递归定义的方式进行计算,以exp()为一个最小的计算项,带括号的也算是一个项。进行递归。在solve里面调用exp()直到表达式结束。
注意:直接处理输入操作不便,所以先进行了数据格式的清理。
日期:2017 8 4
附加:
代码:
1
2
3
4
5
6
using namespace std;t
7
char str[500];
8
bool ans;
9
int ptr=0;
10
char get_c(){
11
return str[ptr++];
12
}
13
14
bool cnt(bool a,char op,bool b){
15
if(op=='|') return a|b;
16
if(op=='&') return a&b;
17
}
18
19
bool exp(){
20
char op=get_c();
21
bool ans;
22
switch(op){
23
case '(':{
24
bool e;
25
ans=exp();
26
op=get_c();
27
while(op!=')'){
28
e=exp();
29
ans=cnt(ans,op,e);
30
op=get_c();
31
}
32
return ans;
33
}
34
case '!':{
35
return !exp();
36
}
37
case 'F':return false;
38
case 'V':return true;
39
default:{
40
printf("ERROR");
41
}
42
}
43
44
}
45
46
bool solve(){
47
bool b,ans=exp();
48
char op=get_c();
49
while(op!='\0'){
50
switch(op){
51
case '|':{
52
ans|=exp();
53
break;
54
}
55
case '&':{
56
ans&=exp();
57
break;
58
}
59
}
60
op=get_c();
61
}
62
return ans;
63
}
64
65
bool pre(){
66
char tmp=getchar();
67
int i=0;
68
while(tmp!='\n'&&tmp!=EOF){
69
if(tmp!=' ') str[i++]=tmp;
70
tmp=getchar();
71
}
72
73
str[i]='\0';
74
ptr=0;
75
if(strlen(str)!=0&&tmp==EOF) return true;
76
return tmp==EOF?false:true;
77
}
78
79
int main(){
80
bool ret;int i=1;
81
while(pre()){
82
ret=solve();
83
printf("Expression %d: %c\n",i++,ret?'V':'F');
84
85
}
86
return 0;
87
}
阅读全文
0 0
- 0804 OpenJ#1108 Boolean Expressions
- 递归-openjudge-1108:Boolean Expressions
- Boolean Expressions
- Boolean Expressions
- Boolean Expressions
- Boolean Expressions
- Boolean Expressions
- Boolean Expressions
- Boolean expressions
- POJ2106 Boolean Expressions / Openjudge Boolean Expressions (递归)全局题号1108
- 14.16 Boolean expressions
- pku 2106 Boolean Expressions
- poj 2106 Boolean Expressions
- poj 2106.Boolean Expressions
- POJ 2106 Boolean Expressions
- POJ 2106 Boolean Expressions
- POJ2106 Boolean Expressions
- 递归之 Boolean Expressions
- 版子,最短路
- 笨办法学 Python · 续 练习 11:`uniq`
- Linux延时定时任务及系统文件查找和临时文件管理
- B
- 数据库调优日记--索引调优概述
- 0804 OpenJ#1108 Boolean Expressions
- Android BroadcastReceiver之开机监听
- 淘淘商城项目 18期 参考资料
- 项目rxjava+rxandroid学习
- 内存池、线程池、进程池
- 牛课网 Java专项练习
- jQuery---JQuery remove(),removeAttr()和removeClass()示例区别
- Hotspot JVM垃圾回收器
- REST API 简介(CXFServlet)