算法描述:
输入一个递增排序的数组和一个数字s查找两个数,使得它们的和正好是s,如果有多对数字的和等于s,输出任意一对即可
例如:[1, 2, 4, 7, 11, 15]:15->4,11
算法实现:
/************************************************************************* > File Name: main.c > Author: cyf > Mail: [email protected] > Created Time: 2016年03月26日 星期六 12时34分45秒 ************************************************************************/ /* * 输入一个递增排序的数组和一个数字s查找两个数,使得它们的和正好是s,如果有多对数字的和等于s,输出任意一对即可 * 例如:[1, 2, 4, 7, 11, 15]:15->4,11 * */ #include "FindNumbersWithSum.h" int main() { int data[6] = { 1, 2, 4, 7, 11, 15 }; int num1, num2; if(FindNumbersWithSum(data, 6, 15, &num1, &num2) == 1) { printf("num1:%d\n", num1); printf("num2:%d\n", num2); } return 0; }
/************************************************************************* > File Name: FindNumbersWithSum.h > Author: cyf > Mail: [email protected] > Created Time: 2016年03月26日 星期六 12时35分11秒 ************************************************************************/ #ifndef FINDNUMBERSWITHSUM_H #define FINDNUMBERSWITHSUM_H #include <stdio.h> #include <stdlib.h> int FindNumbersWithSum(int *data,int length,int sum, int *num1, int *num2); #endif
/************************************************************************* > File Name: FindNumbersWithSum.c > Author: cyf > Mail: [email protected] > Created Time: 2016年03月26日 星期六 12时35分38秒 ************************************************************************/ #include "FindNumbersWithSum.h" int FindNumbersWithSum(int *data, int length, int sum, int *num1, int *num2) { int ret = 0; if (data==NULL||num1==NULL||num2==NULL) { ret = -1; return ret; } int pBegin = 0; int pEnd = length-1; while(pBegin < pEnd) { int curSum = data[pBegin] + data[pEnd]; if (curSum == sum) { ret = 1; *num1 = data[pBegin]; *num2 = data[pEnd]; break; } else if(curSum<sum) pBegin++; else pEnd--; } return ret; }
CC = gcc CFLAGS = -g %.o:%.c $(CC) -o $@ -c $(CFLAGS) $< main:main.o FindNumbersWithSum.o $(CC) main.o FindNumbersWithSum.o -o main $(CFLAGS) clean: rm -rf *.o main