例题1:寻找指定和的整数对
输入n(n<=100,000)个整数,找出其中的两个数,它们之和等于整数m(假定肯定有解)。
/**
找一对数
(1)数组排序
sort()函数用于C++中,对给定区间所有元素进行排序。头文件是#include <algorithm>
(2)二分查找 对每个元素a[i],在数组中二分查找m-a[i],看能否找到
*/
#include<iostream>
#include<algorithm>
#define maxsize 100001
using namespace std;
/**
二分查找
*/
int BinarySearch(int a[],int n,int k)
{
int left=0,right=n-1,flag=0;
while(left<=right)
{
int mid=left+(right-left)/2;
if(a[mid]==k)
{
flag=1;
break;
}
else if(a[mid]>k)
right=mid-1;
else
left=mid+1;
}
return flag;
}
int a[maxsize];
int main()
{
int n,m,flag=0;
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)
{
int j=m-a[i];
if(BinarySearch(a,n,j)==1)
{
flag=1;
if(a[i]==j&&a[i]==a[i+1])
{
cout<<a[i]<<" "<<j<<endl;
break;
}
if(a[i]>=m/2)
break;
cout<<a[i]<<" "<<j<<endl;
}
}
if(flag==0)
cout<<"No Solution"<<endl;
return 0;
}