解法一:遍历
解法二:排序
假设所要求的和为sum,则问题可演变为对数组中每个数组arr【i】,判断sum-arr【i】是否在数组中,问题转化在数组中查询指定的数
解法三:快排+二分查找
code:
#include "stdafx.h"
#include <iostream>
using namespace std;
void GetNum(int *a,int n,int sum)
{
int i,j;
for(i = 0 , j = n - 1 ; i < j ;)
{
if(a[i]+a[j] == sum)
break;
else if(a[i] + a[j] > sum)
--j;
else
++i;
}
if(i < j)
cout<<"Pos:a[i] = "<<a[i]<<",a[j] = "<<a[j]<<endl;
else
cout<<"No Data"<<endl;
}
void quick(int *a,int l,int r)
{
if(l < r)
{
int i = l , j = r , x = a[l];
while(i < j)
{
while(i < j && a[j] >= x)
j--;
if(i < j)
a[i++] = a[j];
while(i < j && a[i] < x)
i++;
if(i<j)
a[j--] = a[i];
}
a[i] = x;
quick(a,l,i-1);
quick(a,i+1,r);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[5] = {4,6,5,9,3};
quick(a,0,4);
GetNum(a,5,10);
return 0;
}