POJ 2106 Boolean Expressions
- 总时间限制: 1000ms 内存限制: 65536kB
- 描述
- The objective of the program you are going to produce is to evaluate boolean expressions as the one shown next:
Expression:( V | V ) & F & ( F | V )
- 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 expressions are of a variable length, although will never exceed 100 symbols. Symbols may be separated by any number of spaces or no spaces at all, therefore, the total length of an expression, as a number of characters, is unknown.
- 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.
- 输出
- For each test expression, print "Expression " followed by its sequence number, ": ", and the resulting value of the corresponding test expression. Separate the output for consecutive test expressions with a new line.
- 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 : F
Expression : V
Expression : V
解题思路
一开始看到这题就觉得要用栈,毕竟是表达式求值问题,但是自己的中缀表达式求值也没练过,而且这次的课程作业又是练习递归,于是就尝试了递归解法。
但是入门太浅,还是搞不懂递归思路,很难从一个表达式中进行结构的分解,逻辑梳理能力太差。
下面是大佬的代码,真心膜拜,希望我的代码能力能越来越好。
#include<iostream>
using namespace std; bool f1();
bool f2(); char getc_() //读入一个非空格字符
{
char c;
while ((c = cin.get()) == ' ');
return c;
}
char peekc_()//读到第一个非空格字符前停止
{
char c;
while ((c = cin.peek()) == ' ')
{
cin.get();
}
return c;
} bool f2()//计算项
{
char c = peekc_();
if (c == '(')
{
getc_(); //拿走左括号
bool d = f1();
getc_(); //拿走右括号
return d;
}
else
{
getc_();
if (c == '!') return !f2();//运算符作用于下一个对象
if (c == 'V') return true;
if (c == 'F') return false;
}
} bool f1()//计算整个表达式
{
char c = peekc_();
if (c == '\n') return false;
bool a = f2();
while (true)
{
c = peekc_();
if (c == '|')
{
getc_();
bool b = f2();
a = a || b;
}
else if (c == '&')
{
getc_();
bool b = f2();
a = a && b;
}
else break;
}
return a;
}
int main()
{
int n = ;
while (cin.peek() != EOF) {
bool f = f1();
if (cin.peek() == '\n' || cin.peek() == EOF) {
cout << "Expression " << ++n << ": " << (f ? 'V' : 'F') << endl;
cin.get();//清理换行符和结束符
}
}
return ;
}
引用网址:
https://blog.csdn.net/chuxin126/article/details/55105076
POJ 2106 Boolean Expressions的更多相关文章
- [poj 2106] Boolean Expressions 递归
Description The objective of the program you are going to produce is to evaluate boolean expressions ...
- (栈的应用5.2.2)POJ 2106 Boolean Expressions(表达式求值)
/* * POJ_2106.cpp * * Created on: 2013年10月30日 * Author: Administrator */ #include <iostream> # ...
- POJ 2106 Boolean Expressions (布尔表达式求值)
题意:关于!,&,| 的运算,表达式中V代表true,F代表false. 思路:见代码吧,很详细了. 要注意 !!!F,!(...) 的情况. #include <iostream> ...
- poj 2106 Boolean Expressions 课本代码
#include<cstdio> const int maxn=100 +10; int val[maxn],vtop; int op[maxn],otop; void insert(in ...
- Boolean Expressions POJ - 2106 (表达式求值)
The objective of the program you are going to produce is to evaluate boolean expressions as the one ...
- POJ | Boolean Expressions
总时间限制: 1000ms 内存限制: 65536kB 描述The objective of the program you are going to produce is to evaluate ...
- Boolean Expressions
Boolean Expressions Time Limit: 1000MS Memory Limit: 30000K Description The objective of the ...
- shorthand trick with boolean expressions
https://stackoverflow.com/questions/2802055/what-does-the-construct-x-x-y-mean --------------------- ...
- POJ 2106-Boolean Expressions,双栈运用类似表达式求值!
Boolean Expressions 首先声明此题后台可能极水(毕竟这种数据不好造!).昨天写了一天却总是找不到bug,讨论区各种数据都过了,甚至怀疑输入有问题,但看到gets也可以过,难道是思路错 ...
随机推荐
- Codeforces1114F Please, another Queries on Array?
题目链接:http://codeforces.com/problemset/problem/1114/F 题意:序列$a$,有两种操作,1 区间里的数同时乘上$x$ 2 求区间的积的欧拉函数 线段树好 ...
- graphql-hooks hooks first 的graphql 客户端
graphql-hooks 是一个hooks first 的graphql 客户端,支持一一些特性 首类hooks api 比较小(5.3Kb) gzip 1.8 kb 完整支持ssr (通过grap ...
- CSS链接伪类:超链接的状态
一.状态: a:link{属性:值;} 链接默认状态 a:visited{属性:值;} 链接访问之后的状态 a:hover{属性:值;} 鼠标放到链接上显示的状态 a:active{属性:值;} 链接 ...
- 洛谷P2877 [USACO07NOV]防晒霜Sunscreen
题目 此题有多种贪心方法. 首先简化题意: 有几个在数轴上的区间,和几个在数轴上确定的位置的点,问用这些数目的点,最多能满足多少个区间里有点. 注意:此题跟区间选点问题不一样,每个点只能满足一个区间, ...
- Go-Json操作
/** * @Author: jadeshu * @Description: * @File: main * @Version: 1.0.0 * @Date: 2019/11/7 2:33 */ pa ...
- mysql locate()函数
mysql> select * from test; +----+------------+-------+-----------+ | id | name | score | subject ...
- mysql 字符类以及重复元字符
字符类 [:alnum:]=[a-zA-Z0-] [:alpha:]=[a-zA-Z] [:digit:]=[-] [:lower:]=[a-z] [:upper:]=[A-Z] [:xdigit:] ...
- 第06组 Beta冲刺(1/5)
队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 准备beta冲刺的内容和分工 修改了后端的一些bug GitHub签入记录 接下来的计划 ...
- Java URLDecoder和URLEncoder对中文进行编码和解码
URLDecoder类包含一个decode(String s,String enc)静态方法,它可以将application/x-www-form-urlencoded MIME字符串转成普通字符串: ...
- 【转】Python访问oracle数据库,DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found"
使用python连接Oracle,出现如下错误: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified ...