设为首页 加入收藏

TOP

编程算法 - 和为s的两个数字 代码(C)
2015-01-22 21:13:18 来源: 作者: 【 】 浏览:19
Tags:编程 算法 和为 两个数字 代码

和为s的两个数字 代码(C)

?

题目: 输入一个递增排序的数组和一个数字s, 在数组中查找两个数, 使得它们的和正好是s.

如果有多对数字的和等于s, 输出任意一对即可.

?

排序数组, 则可以从两端(即最大值, 最小值)开始进行查找, 当和大于时, 则减少前端, 当和小于时, 则递增尾端.

时间复杂度O(n).

?

代码:

?

/*
 * main.cpp
 *
 *  Created on: 2014.6.12
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include 
  
   
#include 
   
     #include 
    
      bool FindNumbersWithSum(int data[], int length, int sum, int* num1, int* num2) { bool found = false; if (length<1 || num1==NULL || num2 == NULL) return found; int ahead = length-1; int behind = 0; while (ahead > behind) { long curSum = data[ahead] + data[behind]; if (curSum == sum) { *num1 = data[behind]; *num2 = data[ahead]; found = true; break; } else if (curSum < sum) ++behind; else --ahead; } return found; } int main(void) { int data[] = {1, 2, 4, 7, 11, 15}; int num1, num2; if (!FindNumbersWithSum(data, 6, 15, &num1, &num2)) printf(Error ); printf(num1 = %d num2 = %d , num1, num2); } 
    
   
  

输出:

?

?

num1 = 4 num2 = 11


?

?

?

?

?

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇编程算法 - 和为s的连续正整数序.. 下一篇C和指针 (pointers on C)――第..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: