UVa 10700 Camel trading
2013-06-20 17:12
393 查看
思路:
当先计算加法时,得到的是最大值,先计算乘法时,得到的是最小值。
当先计算加法时,得到的是最大值,先计算乘法时,得到的是最小值。
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define MAXN 100 bool lowerPriority[45][45]; //lowerPriority[i][j]为真表示,运算符i的优先级低于运算符j bool MinPriorityOp(char *E, char *end, char *&minPriorityOp) { bool exist = false; char *i; for (i = E; i != end; i++) { if (*i == '*' || *i == '+') { if (!exist) { minPriorityOp = i; exist = true; } else if (lowerPriority[*i][*minPriorityOp]) { minPriorityOp = i; } } } return exist; } long long Calc(char *E, char *end) { char *min = NULL; //指向优先级最低的运算符 if (!MinPriorityOp(E, end, min)) { int val; sscanf(E, "%d", &val); return val; } switch (*min) { case '*': return Calc(E, min-1) * Calc(min+1, end); case '+': return Calc(E, min-1) + Calc(min+1, end); default: return -1; } } int main(void) { lowerPriority['*']['*'] = true; lowerPriority['+']['+'] = true; char E[MAXN]; int ncases; scanf("%d\n", &ncases); while (ncases-- != 0) { gets(E); //乘法的优先级低于加法 lowerPriority['*']['+'] = true; lowerPriority['+']['*'] = false; long long max = Calc(E, E+strlen(E)); //乘法的优先级高于加法 lowerPriority['*']['+'] = false; lowerPriority['+']['*'] = true; long long min = Calc(E, E+strlen(E)); printf("The maximum and minimum are %lld and %lld.\n", max, min); } return 0; }
相关文章推荐
- UVa 10700 - Camel trading
- UVA - 10700 Camel trading
- UVA 10700 - Camel trading
- UVA 10700 Camel trading 无括号的表达式 贪心
- UVA - 10700 - Camel trading (简单贪心)
- UVa 10700 - Camel trading
- UVA 10700 Camel trading
- UVa 10700 - Camel trading
- uva 10700 - Camel trading
- uva 10700 - Camel trading
- UVa 10700 - Camel trading
- UVA 10700 Camel trading
- UVA 10700 Camel trading
- uva 10700 Camel trading
- UVA 10700 Camel trading 贪心(栈的使用)
- [贪心&&栈模拟]uva10700 Camel trading
- UVA - 10700 Camel trading
- uva 10700 - Camel trading
- UVA 10700 Camel trading
- uva 10700 Camel trading (水贪心+栈)