51Nod1090 3個數和為0(二分查詢)
阿新 • • 發佈:2018-12-22
這道題和基礎題裡面的1001 陣列中和等於K的數對這道題差不多。
思路:先排升序,讓數組裡的兩個數a[i]a[j]相加,然後在陣列下標j之後找(0-a[i[-a[j])。
#include<iostream> #include<cstring> #include<algorithm> using namespace std; long long a[1005]; int n; int Find(long long x,int l)//二分查詢 { int r=n-1; while(r>=l) { int mid=(r+l)/2; if(a[mid]==x) return 1; if(a[mid]<x) l=mid+1; else r=mid-1; } return 0; } int main() { cin>>n; int i,j,k; for(i=0;i<n;i++) cin>>a[i]; sort(a,a+n); int flag=0; for(i=0;i<n;i++) for(j=i+1;j<n;j++) if(a[i]<=a[j]&&a[j]<=(0-a[i]-a[j])&&Find(0-a[i]-a[j],j+1)) { flag=1; cout<<a[i]<<" "<<a[j]<<" "<<0-a[i]-a[j]<<endl; } if(!flag) cout<<"No Solution"<<endl; return 0; }