首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

面试题39:求和替指定值的两个数

2013-10-08 
面试题39:求和为指定值的两个数题目:给定一个递增数组和一个数字S,在数组中找到两个数使得它们之和正好是S

面试题39:求和为指定值的两个数

题目:给定一个递增数组和一个数字S,在数组中找到两个数使得它们之和正好是S。

思路:设置两个游标分别指向数组的首尾元素,判断他们之和与指定值的大小,适当调整游标位置,直到满足要求为止

代码如下:

#include "stdafx.h"#include <iostream>using namespace std;//递增数组nArr的长度为nLength,指定和为sum//从数组中找到两个数存放在nNum1和nNum2中,它们之和等于sumbool FindNumbersWithSum(int nArr[], int nLength, int sum, int &nNum1, int &nNum2){   if (nArr == NULL || nLength < 2)   {   return false;   }   int nLow = 0;   int nHigh = nLength - 1;   while (nLow < nHigh)   {       if (nArr[nLow] + nArr[nHigh] > sum)       {   nHigh--;       }   else if (nArr[nLow] + nArr[nHigh] < sum)   {   nLow++;   }   else   {            nNum1 = nArr[nLow];nNum2 = nArr[nHigh];return true;   }   }   return false;}int _tmain(int argc, _TCHAR* argv[]){int nArr[6] = {1,2,4,7,11,15};int nNum1 = 0;int nNum2 = 0;if (FindNumbersWithSum(nArr, 6, 15, nNum1, nNum2)){cout << "两个数分别为:" << nNum1 << " " << nNum2 << endl;}else{cout << "不存在这样的两个数!" << endl;}system("pause");return 0;}


运行结果:

面试题39:求和替指定值的两个数

热点排行