找出升序数组中和为给定值的两个数字 不要直接用形参里的表示,输出或清零输入时都是大忌

来源:互联网 发布:中国根域名服务器成功 编辑:程序博客网 时间:2024/04/30 03:35
  • 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。

详细描述:

  • 接口说明

原型:

bool FindTwoNumbersWithSum(int aData[], unsignedint uiLength, int sum, int *pNum1, int *pNum2);

输入参数:

        int aData[]           // 升序数组

         unsigned int uiLength // 数组元素个数

      int sum,              // 给定两个数组的和

输出参数(指针指向的内存区域保证有效):

        int*pNum1            // 第一个数字,对应数组索引小的

      int *pNum2            // 第二个数字,对应数组索引大的

返回值:

    找到返回true,异常返回false











这道题不难,不要直接用形参里的表示,输出或清零输入时都是大忌



#include <iostream>#include "OJ.h"using namespace std;/*功能: 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。输入: int aData[]           // 升序数组      unsigned int uiLength // 数组元素个数      int sum,              // 给定两个数组的和      输出: int *pNum1            // 第一个数字,对应数组索引小的      int *pNum2            // 第二个数字,对应数组索引大的返回: 找到返回true,异常返回false*/bool FindTwoNumbersWithSum(int aData[], unsigned int uiLength, int sum, int *pNum1, int *pNum2){/*在这里实现功能*/if( NULL == aData || uiLength <= 1)return false;/**pNum1 = aData[0];*pNum2 = aData[uiLength - 1];*///这样是完全不对的,只是把值赋给了,跟内存地址没关系int *begin = aData;int *end = aData + uiLength - 1;/*while(pNum1 < pNum2 ){if(*pNum1 + *pNum2 == sum)//这样的虽然可以得到结果,可是输出中无法正确输出*pNum1的值,得自己定义一个指针如*begin来表示return true;else if(*pNum1 + *pNum2 < sum)++pNum1;else--pNum2;}*/while(begin < end ){if(*begin + *end == sum){*pNum1 = *begin;*pNum2 = *end;return true;}else if(*begin + *end < sum)++begin;else--end;}return false;}


0 0
原创粉丝点击