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也可以过,难道是思路错 ...
随机推荐
- destoon下动态链接301到伪静态(ngnix)
分享一个destoon6.0/7.0下动态链接301到伪静态上面,实现权重提升. if ($request_uri ~* "^/index.php\?itemid=(\d+)&mod ...
- UVA - 12183 :Top Secret(N^2的循环矩阵乘法)
pro:N个数排成一圈.一次操作为,每个位置的数+=L*左+R*右,保留x为整数. 问S轮操作后每个位置的值. N<=1000,S<=2^30,x<=9 . sol:不难想到矩阵乘法 ...
- 09-Flutter移动电商实战-移动商城数据请求实战
1.URL接口管理文件建立 第一步需要在建立一个URL的管理文件,因为课程的接口会一直进行变化,所以单独拿出来会非常方便变化接口.当然工作中的URL管理也是需要这样配置的,以为我们会不断的切换好几个服 ...
- java 值传递、引用传递
class Demo02 { public static void main(String[] args) { int a=1; get(a);//值传递 System.out.println(a); ...
- C++函数声明后面加throw()的作用
原文地址:https://blog.csdn.net/to_baidu/article/details/53763683 C++里面为什么有时候在函数声明的时候在后面加throw()关键字? 解释: ...
- 计蒜之道 百度AI小课堂-上升子序列
计蒜之道 百度AI小课堂-上升子序列 题目描述 给一个长度为 \(n\) 的数组 \(a\) .试将其划分为两个严格上升子序列,并使其长度差最小. 输入格式 输入包含多组数据. 数据的第一行为一个正整 ...
- sdcf day1 qwq比赛题解
目录 写在前面 A 链接 思路 代码 B 链接 翻译 思路 代码 C 链接 翻译 思路 代码 写在前面 来到夏令营的第一场比赛,全是水题(第一题除外,不过是原题还是之前做过的,而且是并查集的果题,咕咕 ...
- 转载:理解scala中的Symbol
相信很多人和我一样,在刚接触Scala时,会觉得Symbol类型很奇怪,既然Scala中字符串都是不可变的,那么Symbol类型到底有什么作用呢? 简单来说,相比较于String类型,Symbol类型 ...
- SDN第六次上机作业
1.实验拓扑 实验拓扑图如下: 搭建代码如下: 创建py脚本文件,并编写代码,如下: class MyTopo(Topo): def __init__(self): # initilaize topo ...
- arts lettcode 题目
编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...