【zzuli-1923】表达式求值

本文介绍了一种将中缀表达式转换为后缀表达式并求值的算法,包括自定义函数Smax的处理方法。该算法适用于含有特定数学运算及自定义函数的表达式求值问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【zzuli-1923】表达式求值

题目描述

假设表达式定义为:
1. 一个十进制的正整数 X 是一个表达式。
2. 如果 X 和 Y 是 表达式,则 X+Y, X*Y 也是表达式; *优先级高于+.
3. 如果 X 和 Y 是 表达式,则 函数 Smax(X,Y)也是表达式,其值为:先分别求出 X ,Y 
值的各位数字之和,再从中选最大数。
4.如果 X 是 表达式,则 (X)也是表达式。
例如: 
表达式 12*(2+3)+Smax(333,220+280) 的值为 69。
请你编程,对给定的表达式,输出其值。

输入

第一行: T 表示要计算的表达式个数 ($1 \le T \le 10$)
接下来有 T 行, 每行是一个字符串,表示待求的表达式,长度<=1000

输出

对于每个表达式,输出一行,表示对应表达式的值。

样例输入

3
12+2*3
12*(2+3)
12*(2+3)+Smax(333,220+280) 

样例输出

18
60
69

1.将中缀表达式转化成后缀表达式。如果是整数直接输出,如果是运算符且比栈顶元素优先极高就压入栈顶,否则弹出栈顶运算符。其中左括号优先级最低,但是遇到无条件压栈,遇到右括号就将栈内的运算符弹出,直到遇到左括号,左右括号不输出;新定义运算规则Smax可以看做运算符为','。

2.将后缀表达式求值。将后缀表达式入栈,遇到运算符则弹出栈顶两个数进行运算,遇到新定义运算','特殊考虑一下即可。

 

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 string s;
  4 string houzhui[1004];
  5 map<char, int>M;
  6 int ret_num(string s)
  7 {
  8     int l = s.size(), sum = 0;
  9     for(int i = 0; i < l; i++)
 10     {
 11         if(s[i] >= '0' && s[i] <= '9')
 12             sum = sum*10+s[i]-'0';
 13         else return -1;
 14     }
 15     return sum;
 16 }
 17 int Bit(int n)
 18 {
 19     int sum = 0;
 20     while(n)
 21     {
 22         sum += n%10;
 23         n /= 10;
 24     }
 25     return sum;
 26 }
 27 int main()
 28 {
 29     int n;
 30     stringstream ss;
 31     string s1;
 32     cin>>n;
 33     M['('] = 0, M[','] = 1, M['+'] = 2, M['*'] = 3;
 34     while(n--)
 35     {
 36         cin>>s;
 37         stack<char>S;
 38         int l = s.size(), c = 0, num = 0;
 39         for(int i = 0; i < l; i++)
 40         {
 41             if(s[i] == 'S' || s[i] == 'm' || s[i] == 'a' || s[i] == 'x') continue;
 42             if(s[i] >= '0' && s[i] <= '9') num = num*10+s[i]-'0';
 43             else
 44             {
 45                 if(num != 0)//两运算符相邻的情况
 46                 {
 47                     ss.clear();
 48                     ss<<num, ss>>s1;
 49                     houzhui[c++] = s1;
 50                     num = 0;
 51                 }
 52  
 53                 if(s[i] == '(') S.push(s[i]);
 54                 else if(s[i] == ')')
 55                 {
 56                     while(S.top() != '(')
 57                     {
 58                         houzhui[c++] = S.top();
 59                         S.pop();
 60                     }
 61                     S.pop();
 62                 }
 63                 else
 64                 {
 65                     while(!S.empty() && M[S.top()] >= M[s[i]])
 66                     {
 67                         houzhui[c++] = S.top();
 68                         S.pop();
 69                     }
 70                     S.push(s[i]);
 71                 }
 72             }
 73         }
 74         ss.clear();
 75         if(num != 0)
 76         {
 77             ss<<num, ss>>s1;
 78             houzhui[c++] = s1;
 79         }
 80         while(!S.empty())
 81         {
 82             houzhui[c++] = S.top();
 83             S.pop();
 84         }
 85         stack<int>S1;
 86         for(int i = 0; i < c; i++)
 87         {
 88             num = ret_num(houzhui[i]);//判断是否是整数若是返回其值,不是返回-1(数不可能为负)
 89             if(num != -1) S1.push(num);
 90             else
 91             {
 92                 int n2 = S1.top();
 93                 S1.pop();
 94                 int n1 = S1.top();
 95                 S1.pop();
 96                 if(houzhui[i] == "+") S1.push(n1+n2);
 97                 else if(houzhui[i] == "*") S1.push(n1*n2);
 98                 else
 99                 {
100                     int bit1 = Bit(n1);
101                     int bit2 = Bit(n2);
102                     S1.push(max(bit1, bit2));
103                 }
104             }
105         }
106         printf("%d\n", S1.top());
107     }
108     return 0;
109 }

 

posted @ 2018-05-02 14:33 LesRoad 阅读(...) 评论(...) 编辑 收藏

内容概要:该PPT详细介绍了企业架构设计的方法论,涵盖业务架构、数据架构、应用架构和技术架构四大核心模块。首先分析了企业架构现状,包括业务、数据、应用和技术四大架构的内容和关系,明确了企业架构设计的重要性。接着,阐述了新版企业架构总体框架(CSG-EAF 2.0)的形成过程,强调其融合了传统架构设计(TOGAF)和领域驱动设计(DDD)的优势,以适应数字化转型需求。业务架构部分通过梳理企业级和专业级价流,细化业务能力、流程和对象,确保业务战略的有效落地。数据架构部分则遵循五大原则,确保数据的准确、一致和高效使用。应用架构方面,提出了分层解耦和服务化的设计原则,以提高灵活性和响应速度。最后,技术架构部分围绕技术框架、组件、平台和部署节点进行了详细设计,确保技术架构的稳定性和扩展性。 适合人群:适用于具有一定企业架构设计经验的IT架构师、项目经理和业务分析师,特别是那些希望深入了解如何将企业架构设计与数字化转型相结合的专业人士。 使用场景及目标:①帮助企业和组织梳理业务流程,优化业务能力,实现战略目标;②指导数据管理和应用开发,确保数据的一致性和应用的高效性;③为技术选型和系统部署提供科学依据,确保技术架构的稳定性和扩展性。 阅读建议:此资源内容详尽,涵盖企业架构设计的各个方面。建议读者在学习过程中,结合实际案例进行理解和实践,重点关注各架构模块之间的关联和协同,以便更好地应用于实际工作中。
资 源 简 介 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系, 详 情 说 明 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。 本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系,在此基础上重点分析了一种快速ICA实现算法一FastICA。物质的非线性荧光谱信号可以看成是由多个相互独立的源信号组合成的混合信号,而这些独立的源信号可以看成是光谱的特征信号。为了更好的了解光谱信号的特征,本文利用独立分量分析的思想和方法,提出了利用FastICA算法提取光谱信号的特征的方案,并进行了详细的仿真实验。 此外,我们还进行了进一步的研究,探索了其他可能的ICA应用领域,如音乐信号处理、图像处理以及金融数据分析等。通过在这些领域中的实验和应用,我们发现ICA在提取信号特征、降噪和信号分离等方面具有广泛的潜力和应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值