题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。
分析:两个指针,一个从数组头部开始向后扫,一个从数组尾部向前扫,如果两个指针指向的数组值的和大于s,则后面的指针向前移,否则前面的指针向后移,直到两个值得和等于s。
#include <stdio.h>
bool find(int a[], int len, int sum, int *num1, int *num2)
{
if(a==NULL || len <=0 || num1==NULL || num2==NULL)
return false;
int ahead = len -1;
int behind = 0;
while(behind < ahead)
{
if(a[behind]+a[ahead]==sum)
{
*num1 = a[behind];
*num2 = a[ahead];
return true;
}
else if(a[behind]+a[ahead]>sum)
ahead--;
else
behind++;
}
return false;
}
int main()
{
int sum,num1,num2;
int a[] = {1,2,4,7,11,15};
int len = sizeof(a)/sizeof(int);
int i;
printf("数组值为:\n");
for(i=0;i<len;i++)
printf("%d\t",a[i]);
printf("\n");
printf("请输入两个整数和的值:\n");
scanf("%d",&sum);
if(find(a,len,sum,&num1,&num2))
printf("数组中%d和%d的值为%d\n",num1,num2,sum);
else
printf("没有找到这样的整数\n");
return 0;
}