主要思路为:
定义两个指针一个指向头一个指向尾,在while循环里求头尾和,如果等于S则输出,大于S头指针--,小于S尾指针++。
程序在vs2015中调试运行无误
#include "stdafx.h"
#include<iostream>
using namespace std;
bool FindTheTwoNum(int data[], int len, int *num1, int *num2 ,int sum)
{
bool found = false;
if ((NULL == data) || (len < 2) || (NULL == num1) ||(NULL == num2))
return found;
int *start = data;
int *end = &data[len - 1];
while (start < end)
{
long long curSum = *start + *end;
if (curSum == sum)
{
*num1 = *start;
*num2 = *end;
found = true;
break;
}
else
{
if (curSum>sum)
end --;
else
start ++;
}
}
return found;
}
int main()
{
const int length = 10;
int data[length] = {0,1,2,3,4,5,6,7,8,9};
int sum = 7;
int a = 0;
int b = 0;
if (FindTheTwoNum(data, length, &a, &b, sum))
printf("a is %d, b is %d, a+b = %d", a, b, sum);
else
printf("数组中不存在和为%d的两个数",sum);
while (1);
return 0;
}