思路:刚开始的思路是直接暴力枚举O(n3),感觉会超时,不过还是试着敲了下,居然过了,其中用STL中的set来找最后一个数,最好先排下序,然后再枚举d(要求的)和a,b,再用set去找c
AC代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <set>
using namespace std;
int a[1005];
int flag, ans;
int main() {
int n;
while(scanf("%d", &n), n) {
set<int> num;
for(int i = 0; i < n; i++) {
scanf("%d", &a[i]);
num.insert(a[i]);
}
sort(a, a + n);
flag = 0; ans = 2;
for(int i = n - 1; i >= 0 && !flag; i--) {
for(int j = 0; j < n && !flag; j++) {
for(int k = j + 1; k < n && !flag; k++) {
int tmp = a[i] - a[j] - a[k];
if(i != j && i != k && tmp != a[i] && tmp != a[j] && tmp != a[k])
if(num.count(tmp) ) {
flag = 1;
ans = a[i];
}
}
}
}
if(flag) printf("%d\n", ans);
else printf("no solution\n");
}
return 0;
}