链接:点击打开链接
给一串数字找四个不同的数能凑成a+b+c=d;
数据范围小,枚举大法好
#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<cmath>
#include<vector>
#include<stdlib.h>
#include<iomanip>
#include<list>
#include<stack>
#include<memory.h>
#include<ctype.h>
#include<set>
#include<map>
using namespace std;
typedef long long ll;
const int maxn = 1000 + 5;
ll num[maxn];
int main() {
cin.sync_with_stdio(false);
int n;
while (cin >> n&&n != 0) {
for (int i = 0; i < n; i++) {
cin >> num[i];
}
sort(num, num + n);
int flag = 0;
ll ans;
int l, r;
for (int i = n - 1;i>=0; i--) {
for (int j = n-1; j >=0; j--) {
if (i == j)continue;
ll sum = num[i] - num[j];//枚举d-c
l = 0; r = j - 1;
while (l<r)//查找a+b
{
if (num[l] + num[r] == sum)
{
ans = num[i];
flag = 1;
break;
}
if (num[l] + num[r]>sum)
r--;
else
l++;
}
if (flag)
break;
}
if (flag)
break;
}
if (flag)cout << ans << endl;
else cout << "no solution" << endl;
}
return 0;
}