Petya studies in a school and he adores Maths. His class has been studying arithmetic expressions. On the last class the teacher wrote three positive integers a, b, c on the blackboard. The task was to insert signs of operations '+' and '*', and probably brackets between the numbers so that the value of the resulting expression is as large as possible. Let's consider an example: assume that the teacher wrote numbers 1, 2 and 3 on the blackboard. Here are some ways of placing signs and brackets:
- 1+2*3=7
- 1*(2+3)=5
- 1*2*3=6
- (1+2)*3=9
Note that you can insert operation signs only between a and b, and between b and c, that is, you cannot swap integers. For instance, in the given sample you cannot get expression (1+3)*2.
It's easy to see that the maximum value that you can obtain is 9.
Your task is: given a, b and c print the maximum value that you can get.
The input contains three integers a, b and c, each on a single line (1 ≤ a, b, c ≤ 10).
Print the maximum value of the expression that you can obtain.
1 2 3
9
2 10 3
60
题目大意:
给三个数,中间可以加*或者是+,使得数字最大,不能改变顺序,但可以加括号。
解法:
根据题意,我们可以得知就6种不同的组合:
a+b+c;
a*b*c;
a+b*c;
(a+b)*c;
a*b+c;
a*(b+c);
然后找最大值就可以了。
也可以简化一下: a, b, c均为正整数
a+b*c = (a/c+b)*c, a/c <= a -> a+b*c <= (a+b)*c;
a*b+c = a*(b+c/a) c/a <= c -> a*b+c <= a*(b+c); 这样就只有4个式子了
代码:
#include <cstdio>
#include <algorithm>
using namespace std;
int a, b, c;
int x[10];
int main() {
scanf("%d%d%d", &a, &b, &c);
x[1] = a+b+c;
x[2] = a*b*c;
x[3] = (a+b)*c;
x[4] = a*(b+c);
sort(x+1, x+7);
printf("%d\n", x[6]);
}