題意:一個計算式,只有加和乘,在任意地方加括號,輸出結果可能的最大和最小。
方法:最大就是先加後乘法,最小就是先乘後加。分別用兩個數組保存,最後計算就行。
注:這種輸入總是很郁悶,不能用文件,要用回車去判斷輸入結束(下邊代碼的這種)。當然也可以用字符串,全部讀入以後把數分離出來,注意不止一位數。處理方法和前邊一樣。這裡就貼上一位仁兄的代碼,大家懂了就好。
#include#include #include #include #include #include #include #include #include using namespace std; int main() { int n, mp, ap; long long max, min, num, mul[15], add[15]; char c; scanf("%d", &n); while (n--) { memset(mul, 0, sizeof(mul)); memset(add, 0, sizeof(add)); c = '+'; mp = 0, ap = -1; while (c != 10) { scanf("%lld", &num); if (c == '+') mul[mp] += num, add[++ap] = num; else mul[++mp] = num, add[ap] *= num; scanf("%c", &c); } max = 1, min = 0; for (int i = 0; i <= mp; ++i) max *= mul[i]; for (int i = 0; i <= ap; ++i) min += add[i]; printf("The maximum and minimum are %lld and %lld.\n", max, min); } return 0; }