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
题意:给你三个数,在三个数之间添加加号或者乘号,顺序不能换,让你求最大值。
做法:列出所有的六种情况,然后取最大值就可以了。
#include <iostream> #include <cstdio> #include <climits> #include <cstring> #include <cstdlib> #include <cmath> #include <vector> #include <queue> #include <map> #include <algorithm> #include<ctime> #define esp 1e-6 #define LL long long #define inf 0x0f0f0f0f using namespace std; int main() { int a,b,c; while(scanf("%d%d%d",&a,&b,&c)!=EOF) { int ans=0; ans=max((a+b)*c,a*b*c); ans=max(ans,a+b+c); ans=max(ans,a*(b+c)); ans=max(ans,a+(b*c)); printf("%d\n",ans); } }