题目:给定一个递增数组和一个数字S,在数组中找到两个数使得它们之和正好是S。
思路:设置两个游标分别指向数组的首尾元素,判断他们之和与指定值的大小,适当调整游标位置,直到满足要求为止
代码如下:
#include "stdafx.h"
#include <iostream>
using namespace std;
//递增数组nArr的长度为nLength,指定和为sum
//从数组中找到两个数存放在nNum1和nNum2中,它们之和等于sum
bool FindNumbersWithSum(int nArr[], int nLength, int sum, int &nNum1, int &nNum2)
{
if (nArr == NULL || nLength < 2)
{
return false;
}
int nLow = 0;
int nHigh = nLength - 1;
while (nLow < nHigh)
{
if (nArr[nLow] + nArr[nHigh] > sum)
{
nHigh--;
}
else if (nArr[nLow] + nArr[nHigh] < sum)
{
nLow++;
}
else
{
nNum1 = nArr[nLow];
nNum2 = nArr[nHigh];
return true;
}
}
return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
int nArr[6] = {1,2,4,7,11,15};
int nNum1 = 0;
int nNum2 = 0;
if (FindNumbersWithSum(nArr, 6, 15, nNum1, nNum2))
{
cout << "两个数分别为:" << nNum1 << " " << nNum2 << endl;
}
else
{
cout << "不存在这样的两个数!" << endl;
}
system("pause");
return 0;
}
运行结果: