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

  • 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。

详细描述:

  • 接口说明

原型:

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值