做这个题,我们的思路是用两个指针,一个指向数组第一个元素,一个指向数组最后一个元素。
因为数组是有序的,所以如果最右边的元素大于我们要找的和,直接将右指针向左移一个单位就可以。
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int x = 0;
scanf("%d", &x);
int* p = arr;
int* left = arr;
int* right = arr + 9;
while (left < right)
{
if (*right > x)
right--;
else if ((*left) + (*right) == x)
{
printf("%d %d ", left - p, right - p);
left++;
right--;
}//找到一组元素之后,两个坐标继续向中间移动寻找下一对目标
else if (*left < x - (*right))
left++;
//如果左边的值加右边的值小于这个目标,左边的数则需要增大
else if (*right > x - (*left))
right--;
//如果当前的和大于这个目标,则右边的值需要减小
}
return 0;
}
相当的成功。