最简单的暴力 会超时
所以我们要想方设法的减少循环层数或者循环次数,
a+b+c = d
那么a+b=d-c
这不是简单的等式变形
而是意味着我们循环的次数减少了。
我们对于d和c分别用一层循环,
对于a+b只用一层循环。
很妙的转变,,,
代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
int a[1010];
int main ()
{
int n;
while(scanf("%d",&n),n)
{
for(int i = 0; i < n; i++) scanf("%d",&a[i]);
sort(a,a+n);
int f = 0;
for(int i = n-1; i >= 0; i--)
{
for(int j = n-1; j >= 0; j--) if(i!=j)
{
int t = a[i]-a[j];
for(int l = 0, k = j-1; l<k;)
{
if(a[l]+a[k]==t) {f = 1; break;}
else if(a[l]+a[k]>t) k--;
else l++;
}
if(f) break;
}
if(f) {printf("%d\n",a[i]); break;}
}
if(f==0)printf("no solution\n");
}
return 0;
}