突然想到一个奇怪的方法。
只有 (3) 个数,每个数还都是个位数,那直接一个一个判断不就行了。
那么,就有下列排列方法。
- (overline{ab} + c)
- (overline{ac} + b)
- (overline{ba} + c)
- (overline{bc} + a)
- (overline{ca} + b)
- (overline{cb} + a)
- (a + overline{bc})
- (a + overline{cb})
- (b + overline{ac})
- (b + overline{ca})
- (c + overline{ab})
- (c + overline{ba})
然后我们只需要把他们加起来然后找最大值就可以了。
那么如何把两个数字拼在一起呢?
很简单,只需要把第一个数 ( imes 10) 后再加上第二个数即可,也就是 (a imes 10 + b)。
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int maxv = -100, a, b, c;
scanf("%d%d%d", &a, &b, &c);
if((a * 10 + b) + c > maxv)maxv = (a * 10 + b) + c;
if((a * 10 + c) + b > maxv)maxv = (a * 10 + c) + b;
if((b * 10 + a) + c > maxv)maxv = (b * 10 + a) + c;
if((b * 10 + c) + a > maxv)maxv = (b * 10 + c) + a;
if((c * 10 + a) + b > maxv)maxv = (c * 10 + a) + b;
if((c * 10 + b) + a > maxv)maxv = (c * 10 + b) + a;
if(a + (b * 10 + c) > maxv)maxv = a + (c * 10 + b);
if(a + (c * 10 + b) > maxv)maxv = a + (c * 10 + b);
if(b + (a * 10 + c) > maxv)maxv = b + (a * 10 + c);
if(b + (c * 10 + a) > maxv)maxv = b + (c * 10 + a);
if(c + (a * 10 + b) > maxv)maxv = c + (a * 10 + b);
if(c + (b * 10 + a) > maxv)maxv = c + (b * 10 + a);
printf("%d", maxv);
return 0;
}