给你几个数字
找出满足a + b + c = d
且 d 最大
没看到最大 WA了好几发
看到能用暴力过去
就试了一下
先拍序
三层for
最大的值用二分来找
也可以从d 开始找
即num[n- 1], num[n -2]...
来找符合的 a b c
这样子只用找一次就可以了
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 1005;
int t, s[N], d, c, b, a;
int solve() {
for (d = t - 1; d >= 0; d--) {
for (c = t - 1; c >= 0 ; c--) {
if (s[d] == s[c])
continue;
for (b = t - 1; b >= 0; b--) {
if (s[d] == s[b] || s[c] == s[b])
continue;
for (a = t - 1; a >= 0; a--) {
if (s[a] == s[d] || s[a] == s[b] || s[a] == s[c])
continue;
if (s[d] == s[c] + s[b] + s[a])
return 1;
}
}
}
}
return 0;
}
int main() {
while (scanf("%d", &t) && t) {
for (int i = 0; i < t; i++)
scanf("%d", &s[i]);
sort(s, s + t);
if (solve())
printf("%d\n", s[d]);
else
printf("no solution\n");
}
return 0;
}