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