1244:和为给定数
定义一个一维数组,输入数据后,按从小到大排序,再用二分查找是否有符合要求的两个数。
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int a[100000]; 5 int main() 6 { 7 int n,m,l,r,mid; 8 cin>>n; 9 for(int i=0;i<n;i++) 10 cin>>a[i]; 11 cin>>m; 12 sort(a,a+n); 13 for(int i=0;i<n;i++) 14 { 15 l=i+1; 16 r=n-1; 17 while(l<=r) 18 { 19 mid = (l+r)/2; 20 if(a[i]+a[mid]==m) 21 { 22 cout<<a[i]<<" "<<a[mid]; 23 return 0; 24 } 25 else if(a[mid]+a[i]>m) r=mid-1; 26 else l=mid+1; 27 } 28 } 29 cout<<"No"; 30 return 0; 31 }
定义l与r,l在数组首,r在数组尾,定义mid在l与r的中间,如果a[l]+a[mid]=m;就直接输出a[l]与a[mid];
如果a[l]+a[mid]>m;就可以将a[mid]后面的数组都忽略,只讨论a[mid]前面的。