博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 327 - Evaluating Simple C Expressions
阅读量:4074 次
发布时间:2019-05-25

本文共 1384 字,大约阅读时间需要 4 分钟。

FILE 3763
30.56%
1145
70.66%
题目链接:

题目类型: 数据结构, 二叉树

样例输入:
a + bb - za+b--+c++c+f--+--a   f-- + c-- + d-++e
样例输出:
Expression: a + b    value = 3    a = 1    b = 2Expression: b - z
题目大意: 
给一个表达式, 表达式的变量由26个小写字母组成,这26个字母按顺序的初始值分为为1,2,3,……26,并且表达式中一个变量不会重复出现。 操作符由+, -, ++, -- (自增和自减有前缀和后缀)。
 然后输出这个表达式的值,和每个出现的变量计算之后的值
解题思路:
因为是数据结构专题, 最开始的时候自然想到的是建树的方法来做。 
想好方法之后, 开始敲代码。 等到把建树的代码敲完后, 并且准备计算结果时, 发现其实这一题并不需要建树也完全可以,而且更加简单。
不管是什么方法, 解题的基本思路是, 先把表达式的前缀后缀++, --处理掉, 那后从左到右计算就结果就行了。
下面是非建树版的代码:
#include
#include
#include
#include
#include
#include
#include
using namespace std;vector
var;deque
que;const int MAXN = 120;char str[MAXN];int val[26]; // 用来保存a,b,……z的初始值int increment;// 对输入的字符串进行过滤,消去空格void Filter(){ int pos=0; for(int i=0; i
='a' && str[i]<='z'){ // 有前缀 var.push_back(str[i]); // 把该字母存入 if(i>=2 && havePrefix(i)){ if(str[i-1]=='+') ++val[str[i]-'a']; else --val[str[i]-'a']; int n = val[str[i]-'a']; que.push_back(n); str[i-1]=str[i-2] = ' '; } // 有后缀 else if(i<=strlen(str)-3 && haveSuffix(i)){ int n = val[str[i]-'a']; que.push_back(n); if(str[i+1]=='+'){ ++val[str[i]-'a']; --increment; } else{ --val[str[i]-'a']; ++increment; } str[i+1] = str[i+2] = ' '; } else { int n = val[str[i]-'a']; que.push_back(n); } } }}int GetSum(){ for(int i=0; i
——      生命的意义,在于赋予它意义。 
                   原创 
 , By   D_Double

转载地址:http://euzni.baihongyu.com/

你可能感兴趣的文章
linux CPU个数查看
查看>>
分布式应用开发相关的面试题收集
查看>>
简单理解Socket及TCP/IP、Http、Socket的区别
查看>>
利用HTTP Cache来优化网站
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
常用排序算法总结(一) 比较算法总结
查看>>
SSH原理与运用
查看>>
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
《天亮了》韩红
查看>>
Windows CE下USB摄像头驱动开发(以OV511为例,附带全部源代码以及讲解) [转]
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
如何自定义iOS中的控件
查看>>
iOS 开发百问
查看>>