uva 10700

来源:互联网 发布:nginx lua配置 编辑:程序博客网 时间:2024/06/05 23:47

题意:一个算式,运算符只有加号和乘号,要求输出随意加括号后得到最大值和最小值。

题解:最大值加号优先级比乘号大,最小值乘号优先级比加号大,所以求最大值先算加号,再算乘号,最小值反之。

#include <stdio.h>#include <string.h>#include <string>#include <iostream>using namespace std;double val[15];char ope[15];int mapp[15];string str;int main() {int t;scanf("%d", &t);getchar();while (t--) {getline(cin, str);memset(mapp, 0, sizeof(mapp));int len = str.size();int n = 0, m = 0;double minimum = 0, maximum = 1;for (int i = 0; i < len; i++) {double temp = 0;while (isdigit(str[i])) {temp = temp * 10 + str[i] - '0';i++;}val[n++] = temp;ope[m++] = str[i];}m--;double temp1;int flag;for (int i = 0; i < m; i++) {temp1 = 1, flag = 0;while (ope[i] == '*') {flag = 1;temp1 *= val[i];mapp[i] = 1;i++;}if (flag) {temp1 *= val[i];mapp[i] = 1;minimum += temp1;}}for (int i = 0; i < n; i++)if (!mapp[i])minimum += val[i];memset(mapp, 0, sizeof(mapp));for (int i = 0; i < m; i++) {temp1 = flag = 0;while (ope[i] == '+') {flag = 1;temp1 += val[i];mapp[i] = 1;i++;}if (flag) {temp1 += val[i];mapp[i] = 1;maximum *= temp1;}}for (int i = 0; i < n; i++)if (!mapp[i])maximum *= val[i];printf("The maximum and minimum are %.0lf and %.0lf.\n", maximum, minimum);}return 0;}


0 0
原创粉丝点击