数组中找两个数使其和等于输入数

来源:互联网 发布:淘宝浏览器秒杀插件 编辑:程序博客网 时间:2024/05/22 02:38
/********************************************************************题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。方法:1,分别从数组前,数组后向中间查找。直到前后相遇!!2,当前得到currentSum>sum说明:大的数太大(数组递增,后面的数太大)。    应该将指向最后的标记向前挪动3,当前得到currentSum<sum说明:大的数太小(数组递增,前面的数太小)。    应该将指向最后的标记向后挪动4,当前得到currentSum=sum说明:找到答案***************************************************************************/#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<time.h>using namespace std;void Random(int a[],int n){    int i=0;    srand( (unsigned)time( NULL ) );    while(i<n)    {        a[i++]=rand()/999;    }}template <class T>struct numSum{    T big;    T small;};bool FindTwoNumbers(int data[],unsigned int length,int sum,  numSum <int> &num ){                            //num1,num2采用的是地址,如果方法内改变则改变的是调用实参的值    bool found = false;    if(length < 1)        return found;    int begin = 0;    int end = length - 1;    while(end > begin)    {        long curSum = data[begin] + data[end];        if(curSum == sum)        {            num.small = data[begin];            num.big = data[end];            found = true;            break;        }        else if(curSum > sum)            end--;        else            begin++;    }    return found;}int main(){    int a[20];    Random(a,20);    for(int i=0;i<20;i++)    {        cout<<" "<<a[i]<<" ";    }    cout<<endl<<"-------------------"<<endl;    sort(a,a+20);    for(int i=0;i<20;i++)    {        cout<<" "<<a[i]<<" ";    }    cout<<endl<<"-------------------"<<endl;    numSum <int> number;    int sum=25;    FindTwoNumbers(a, 20,sum, number);    cout<<number.small<<" + "<<number.big<<" = "<<sum<<endl;    return 0;}/****************************************** 31  25  31  26  21  28  1  12  32  7  4  11  20  14  23  20  28  8  25  5------------------- 1  4  5  7  8  11  12  14  20  20  21  23  25  25  26  28  28  31  31  32-------------------4 + 21 = 25Process returned 0 (0x0)   execution time : 2.007 sPress any key to continue.*******************************************

原创粉丝点击