题目名称 | 378. [HAOI 2004模拟]逻辑表达式 |
---|---|
输入输出 | expressa.in/out |
难度等级 | ★☆ |
时间限制 | 1000 ms (1 s) |
内存限制 | 128 MiB |
测试数据 | 5 |
题目来源 | cqw 于2009-09-23加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:0, 提交:2, 通过率:0% | ||||
magic | 0 | 0.000 s | 0.11 MiB | Pascal |
Subaru-STi | 0 | 0.002 s | 0.26 MiB | C++ |
本题关联比赛 | |||
20090923练习赛 |
关于 逻辑表达式 的近10条评论(全部评论) |
---|
【问题描述】
由英文字母和符号~、 *、+、()组成逻辑表达式,英文字母表示变量,变量有两种可能的取值,False或True;~、*、+、括号()可改变表达式的运算次序,且可以嵌套。
逻辑 “非”运算的公式如下表:
A |
~ A |
TRUE |
FALSE |
FALSE |
TRUE |
逻辑 “与”和逻辑“或”的运算公式如下表:
A |
B |
A*B |
A+B |
FALSE |
FALSE |
FLASE |
FLASE |
FALSE |
TRUE |
FLASE |
TRUE |
TRUE |
FALSE |
FALSE |
TRUE |
TRUE |
TRUE |
TRUE |
TRUE |
两个逻辑表达式等价,当且仅当两个公式中相同名字的变量取任何一种值时两个公式的值都相同。如:
A*(B+C) 与 A*B+A*C 等价
A*(~A+B) 与 A*B 等价
(~A+A)*B+C 与 B+C 等价
A*B+A*~B 与 A 等价
而:
A+B 与 A*B 不等价
A*B+~C 与 A*E+~F 不等价
现要求你编程解决下列问题:
任务 1 :读取一个逻辑表达式,判断这个表达式的合法性;
【输入格式1】
输入文件只有一行,一个字符串s,s的长度不超过255。
【输出格式1】
输出文件只有一个单词,yes或no。 表达式合法时输出yes,不合法时输出no。
【输入输出样例1】
输入:
expressa.in
(A+B)*(A-B)
输出:
expressa.out
no
(注:逻辑运算中没有"-"运算)
任务2:
将读入的表达式化简,化简的表达式为
a1*a2*…*aN+b1**b2*…*bM+…+x1*x2*…*xL
其中 ai、bj、…xk(i=1,2,…n; j=1,2,…m; k=1,2,…L)表示一个变量或一个变量的逻辑非;
【输入输出样例2】
输入:
expressb.in
(A+B)*C
输出:
expressb.out
A*C+B*C