您的位置:首页 > 其它

codeforces Round #274(div2) A解题报告

2014-10-20 11:54 316 查看
A. Expression

time limit per test
1 second

memory limit per test
256 megabytes

input
standard input

output
standard output

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.

Input

The input contains three integers a, b and c,
each on a single line (1 ≤ a, b, c ≤ 10).

Output

Print the maximum value of the expression that you can obtain.

Sample test(s)

input
1
2
3


output
9


input
2
10
3


output
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]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息