这道题可以将a+b+c=d改为a+b=d-c,然后折半枚举d-c的所有可能性,然后找出是否存在a+b满足条件即可。
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 1000 + 5;
int s[maxn];
int main(int argc, char const *argv[]) {
int n;
while (scanf("%d", &n) == 1 && n) {
for (int i = 0; i < n; i++) {
scanf("%d", &s[i]);
}
sort(s, s + n);
int ans;
bool find = false;
for (int i = n - 1; i >= 0; i--) {
for (int j = n - 1; j >= 0; j--) {
if (i == j) {
continue;
}
int sum = s[i] - s[j];
int l = 0, u = j - 1;
while (l < u) {
int acl = s[l] + s[u];
if (acl == sum) {
find = true;
ans = s[i];
break;
} else if (acl > sum) {
u--;
} else {
l++;
}
}
if (find) {
break;
}
}
if (find) {
break;
}
}
if (find) {
printf("%d\n", ans);
} else {
puts("no solution");
}
}
return 0;
}