uva - 10700 - Camel trading(贪心)

来源:互联网 发布:心彻为知 知彻为德出自 编辑:程序博客网 时间:2024/04/30 07:27

题意:一个计算式,只有加和乘,在任意地方加括号,输出结果可能的最大和最小。

方法:最大就是先加后乘法,最小就是先乘后加。分别用两个数组保存,最后计算就行。

注:这种输入总是很郁闷,不能用文件,要用回车去判断输入结束(下边代码的这种)。当然也可以用字符串,全部读入以后把数分离出来,注意不止一位数。处理方法和前边一样。这里就贴上一位仁兄的代码,大家懂了就好。

#include <iostream>  #include <iomanip>  #include <string>  #include <cstring>  #include <cstdio>  #include <queue>  #include <stack>  #include <algorithm>  #include <cmath>  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;  }


1 0
原创粉丝点击