Aroud 800 A.D., El Mamum, Calif of Baghdad was presented the formula 1+2*3*4+5, which had its origin in the financial accounts of a camel transaction. The formula lacked parenthesis and was ambiguous. So, he decided to ask savants to provide him with a method to find which interpretation is the most advantageous for him, depending on whether is is buying or selling the camels.
You are commissioned by El Mamum to write a program that determines the maximum and minimum possible interpretation of a parenthesis-less expression.
The input consists of an integer N, followed by N lines, each containing an expression. Each expression is composed of at most 12numbers, each ranging between 1 and 20, and separated by the sum and product operators + and *.
For each given expression, the output will echo a line with the corresponding maximal and minimal interpretations, following the format given in the sample output.
3 1+2*3*4+5 4*18+14+7*10 3+11+4*1*13*12*8+3*3+8
The maximum and minimum are 81 and 30. The maximum and minimum are 1560 and 156. The maximum and minimum are 339768 and 5023.
题目大意:
计算一个式子在不同结合的情况下的最大最小值。
解题思路:
最大值即先算加法再算乘法,最小值是先算乘法再算加法。
代码:
#include<iostream>
#include<cstdio>
#include<vector>
#include<sstream>
using namespace std;
int n;
vector<long long> vmini,vmaxi;
string str;
void solve(){
long long mina,maxa,a,b,maximum=1,minimum=0;
stringstream ss;
char ch;
cin>>str;
ss<<str;ss>>a;//流只能放在前面.
mina=maxa=a;
vmaxi.push_back(maxa);
vmini.push_back(mina);
while(ss>>ch>>b){
if(ch=='+'){
maxa=vmaxi.back()+b;
vmaxi.pop_back();
vmaxi.push_back(maxa);
vmini.push_back(b);
}
else{
mina=vmini.back()*b;
vmini.pop_back();
vmini.push_back(mina);
vmaxi.push_back(b);
}
}
for(int i=0;i<vmaxi.size();i++){//这样遍历更简单.
maximum=maximum*vmaxi[i];
}
for(int i=0;i<vmini.size();i++){
minimum=minimum+vmini[i];
}
printf("The maximum and minimum are %lld and %lld.\n",maximum,minimum);
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
vmaxi.clear();
vmini.clear();
solve();
}
return 0;
}
UVA 10700 Camel trading(计算式子加减乘除的优先级处理),布布扣,bubuko.com
UVA 10700 Camel trading(计算式子加减乘除的优先级处理)
原文:http://blog.csdn.net/hush_lei/article/details/38440647