Description
数据结构之神cczcczccz又在出毒瘤数据结构了
神出了这样一个题:
给你三个数,在这三个数中间任意加∗*∗或者是+++,然后可以随便打括号,只要这个表达式合法
比如说1 2 31\ 2\ 31 2 3可以得到:
1+2∗3=71+2*3=71+2∗3=7 1∗(2+3)=51*(2+3)=51∗(2+3)=5 1∗2∗3=61*2*3=61∗2∗3=6 $ (1+2)*3=9$
不能改变这三个数的原顺序
最大化表达式的值
Input
输入三行,每行一个数分别表示a,b,c(1≤a,b,c≤10)a,b,c(1\le a,b,c\le 10)a,b,c(1≤a,b,c≤10)
Output
输出一行一个数表示答案
Sample Input
1
2
3
Sample Output
9
Solution
a=b=c=1,ans=3a=b=c=1,ans=3a=b=c=1,ans=3
a=b=1,c>1,ans=2ca=b=1,c>1,ans=2ca=b=1,c>1,ans=2c
a>1,b=c=1,ans=2aa>1,b=c=1,ans=2aa>1,b=c=1,ans=2a
a=c=1,b>1,ans=b+2a=c=1,b>1,ans=b+2a=c=1,b>1,ans=b+2
else,ans=max((a+b)c,a(b+c))else,ans=max((a+b)c,a(b+c))else,ans=max((a+b)c,a(b+c))
Code
#include<cstdio>
#include<algorithm>
using namespace std;
int a,b,c;
int main()
{
while(~scanf("%d%d%d",&a,&b,&c))
{
if(a==1&&b==1&c==1)printf("3\n");
else if(a>1&&b>1&&c>1)printf("%d\n",a*b*c);
else if(a==1&&b==1||b==1&&c==1)printf("%d\n",2*b);
else if(a==1&&c==1)printf("%d\n",b+2);
else printf("%d\n",max((a+b)*c,a*(b+c)));
}
return 0;
}