http://poj.org/problem?id=2549
题目大意:从集合中找到四个不相同的数,满足a+b+c=d,输出最大的d。
——————————————————————————
该式子变为a+b=d-c,于是我们可以通过枚举d-c,查找是否有a+b满足的值。
#include<cstdio> #include<cstring> #include<map> #include<iostream> #include<cmath> #include<algorithm> using namespace std; const int INF=-2147483647; int a[1001]; int main(){ int n; while(scanf("%d",&n)!=EOF&&n){ for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } sort(a+1,a+n+1); bool ok=0; for(int i=n;i>=1;i--){ for(int j=n;j>=1;j--){ if(i==j)continue; int k=a[i]-a[j],l=1,r=j-1; while(l<r){ if(k<a[l]+a[r]){ r--; }else if(k>a[l]+a[r]){ l++; }else{ printf("%d ",a[i]); ok=1; break; } } if(ok)break; } if(ok)break; } if(!ok)printf("no solution "); } return 0; }