本文主要是介绍uva 10700 Camel trading,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:求表达式的最大值和最小值,运算符只有+和*,明显就是优先级的不同而已,最小的就先算*,最大的就先算+,以往的表达式的题目我们都是用栈来完成的,这题也不例外#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;stack<long long>Min;
stack<long long>Max;int main()
{int t;scanf("%d",&t);while (t--){while (!Min.empty())Min.pop();while (!Max.empty())Max.pop();long long a,t;char ch;scanf("%lld",&a);Min.push(a);Max.push(a);while ((ch = getchar()) != '\n'){scanf("%lld",&a);if (ch == '+'){Min.push(a);t = Max.top();Max.pop();t += a;Max.push(t);}else if (ch == '*'){Max.push(a);t = Min.top();Min.pop();t *= a;Min.push(t);}}long long ans_min = 0,ans_max = 1;while (!Min.empty()){ans_min += Min.top();Min.pop();}while (!Max.empty()){ans_max *= Max.top();Max.pop();}printf("The maximum and minimum are %lld and %lld.\n",ans_max,ans_min);}return 0;
}
这篇关于uva 10700 Camel trading的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!