题目名称 378. [HAOI 2004模拟]逻辑表达式
输入输出 expressa.in/out
难度等级 ★☆
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 5
题目来源 Gravatarcqw 于2009-09-23加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:0, 提交:2, 通过率:0%
Gravatarmagic 0 0.000 s 0.11 MiB Pascal
GravatarSubaru-STi 0 0.002 s 0.26 MiB C++
本题关联比赛
20090923练习赛
关于 逻辑表达式 的近10条评论(全部评论)

378. [HAOI 2004模拟]逻辑表达式

★☆   输入文件:expressa.in   输出文件:expressa.out   简单对比
时间限制:1 s   内存限制:128 MiB

【问题描述】
由英文字母和符号~、 *、+、()组成逻辑表达式,英文字母表示变量,变量有两种可能的取值,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