查找数组中和为s的两个数字

来源:互联网 发布:李小璐淘宝店名 编辑:程序博客网 时间:2024/05/18 00:31

题目:输入一个递增排序的数组和一个数字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--;elsebehind++;}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);elseprintf("没有找到这样的整数\n");return 0;}


原创粉丝点击