样例输入:
a + b
b - z
a+b--+c++
c+f--+--a
f-- + c-- + d-++e
样例输出:
Expression: a + b
value = 3
a = 1
b = 2
Expression: b - z
题目大意:
给一个表达式, 表达式的变量由26个小写字母组成,这26个字母按顺序的初始值分为为1,2,3,……26,并且表达式中一个变量不会重复出现。 操作符由+, -, ++, -- (自增和自减有前缀和后缀)。
然后输出这个表达式的值,和每个出现的变量计算之后的值
解题思路:
因为是数据结构专题, 最开始的时候自然想到的是建树的方法来做。
想好方法之后, 开始敲代码。 等到把建树的代码敲完后, 并且准备计算结果时, 发现其实这一题并不需要建树也完全可以,而且更加简单。
不管是什么方法, 解题的基本思路是, 先把表达式的前缀后缀++, --处理掉, 那后从左到右计算就结果就行了。
下面是非建树版的代码:
#include<iostream>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<deque>
#include<vector>
#include<algorithm>
using namespace std;
vector<char>var;
deque<int>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<strlen(str); ++i){
if(str[i] != ' '){
str[pos++] = str[i];
}
}
str[pos] = 0; // 字符串结束标志'\0'
}
// 是否有前缀
inline bool havePrefix(int i){
if(str[i-1]=='+'&&str[i-2]=='+' || str[i-1]=='-'&&str[i-2]=='-')
return true;
return false;
}
// 是否有后缀
inline bool haveSuffix(int i){
if(str[i+1]=='+'&&str[i+2]=='+' || str[i+1]=='-'&&str[i+2]=='-')
return true;
return false;
}
void PreProsess(){
increment = 0;
while(!que.empty()) que.pop_back();
var.clear();
for(int i=0; i<strlen(str); ++i){
if(str[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<strlen(str); ++i){
if(str[i]=='+' || str[i]=='-'){
int a=que.front();
que.pop_front();
int b=que.front();
que.pop_front();
if(str[i]=='+')
que.push_front(a+b);
else
que.push_front(a-b);
}
}
return que.front();
}
void Solve(){
// 给a,b,c……z 初始值
for(int i=0; i<26; ++i){
val[i] = i+1;
}
Filter();
PreProsess();
int sum = GetSum();
// puts(str);
printf(" value = %d\n", sum);
sort(var.begin(), var.begin()+var.size());
for(int i=0; i<var.size(); ++i){
printf(" %c = %d\n",var[i], val[var[i]-'a']);
}
// printf("\n");
}
int main(){
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
while(gets(str)){
printf("Expression: %s\n", str);
Solve();
}
return 0;
}
—— 生命的意义,在于赋予它意义。
分享到:
相关推荐
ISO 20140-2:2018 Automation systems and integration - Evaluating
本教程“Matlab Tutorial - 55 - Evaluating Derivatives at a Point”旨在介绍如何利用Matlab来求解一元或多元函数在指定点的导数值。以下是关于这一主题的详细知识: 1. **符号计算和函数定义**:在Matlab中,...
根据提供的文件信息,下面详细阐述了关于开源平台用于评估轻量级加密算法的硬件实现的知识点。 ...轻量级加密算法是设计用于资源受限环境的密码算法,其特点是占用较少的计算资源,如内存和处理能力,同时保持足够的...
Evaluating Python expressions
在线社会网络(Online Social Networks,OSNs)是指互联网上形成的社交网络系统,它允许用户发表内容、分享信息、记录日常生活以及表达个人意见。随着在线社交网络站点的快速普及,其已成为人们获取信息、表达观点的...
本项目“Evaluating-Infix-Expressions-with-Swift”提供了一个解决方案,允许快速有效地评估中缀表达式。它可能包括一个解析器和一个计算引擎,用于将中缀表达式转换为可执行的形式,并返回结果。 首先,我们需要...
TF Model building/training/evaluating for simple nlp task just by params configuration, training/evaluating monitor and params configure GUI with streamlit.
Appendix C - Tuning Your Backup and Recovery Application Appendix D - Disaster Recovery Planning Kit—From End to Beginning Appendix E - Business Impact Analysis Planning Kit—The Storm Before ...
完整英文版 ISO 20140-2:2018 Automation systems and integration - Evaluating energy efficiency and other factors of manufacturing systems that influence the environment:Environmental performance ...
标准可以在这里免费获取:https://store.ies.org/product/tm-30-20-ies-method-for-evaluating-light-source-color-rendition/ 软件输入测试光源的光谱功率分布(SPD),该分布应为401x1矩阵,代表测试光源SPD在380 -...
Evaluating harmonic-induced transformer heating-00484029pdf,Evaluating harmonic-induced transformer heating-00484029
USCAR-10-REV2 TEST FOR EVALUATING THE TORQUE-TENSION RELATIONSHIP OF BOTH EXTERNAL AND INTERNAL METRIC THREADED FASTENERS.pdf
《Evaluating Derivatives Principles and Techniques of AD-2》是一部深入探讨自动微分算法的经典著作,由著名的AD软件包ADOL-C的创始人撰写。本书作为系列的第二部分,重点介绍了自动微分技术中的高级主题,特别是...
IEC 60587-2022 Test methods for evaluating resistance to tracking and erosion.pdf
Information Retrieval Implementing and Evaluating Search Engines Stefan B¨uttcher Charles L. A. Clarke Gordon V. Cormack
c) 2005IEEEtkde Toward the next generation of recommender systems - A survey of the state-of-the-art and possible extensions 3. 动手能力(实践算法-入门篇) a) 2004ACMtois Item-based top-N ...
GMW 15424-2012 Procedure for Evaluating Parting Lines.pdf
c) 2005IEEEtkde Toward the next generation of recommender systems - A survey of the state-of-the-art and possible extensions 3. 动手能力(实践算法-入门篇) a) 2004ACMtois Item-based top-N recommendation...
"evaluating indicator.rar"这个压缩包文件显然是为了提供五种常用的分类模型性能测试指标,这有助于我们理解并比较不同模型的预测能力。下面,我们将深入探讨这些指标及其应用。 1. 准确率(Accuracy):这是最...