数组里任意两值求和,求和值等于target时,输出两元素的下标,找出所有满足要求的组合

要求:给定一个目标值target,一个数组,数组里任意两个数求和,和若等于target,输出这些组合的下标,不重复计算

例:array=[1,2,5,,6,3]    target=7

输出:

0,3(0是元素1的下标,3是元素6的下标)(不重复计算:1+6=7 , 6+1=7,只输出一次下标)

1,2

流程:

1、键盘输入数组;

2、设置target值;

3、统计所有满足要求的组合并输出

#include <iostream>
#include<vector>
#define number 5

using namespace std;

vector<vector<int> > search(int arr[], int target)
{
    vector<vector<int> >result;
    vector<int> res;
    int add=0;
    int i,j;
    for(i=0;i<number-1;i++)
    {
        for(j=i+1;j<number;j++)
        {
            add=arr[i]+arr[j];
            if(add==target)
            {
            res.push_back(i);
            res.push_back(j);
            result.push_back(res);
            }
            res.clear();            
        }
    }
    return result;
    
}

int main()
{
    vector<vector<int> > temp;
    int target=0;
    int num_arr[number]; 
    int i=0;
    cout<<"输入一个数列:";
    for(i=0;i<number;i++)
    {
        cin>>num_arr[i];
    }
    for(i=0;i<number;i++)
    {
        cout<<num_arr[i]<<" ";
    }
   cout<<"输入target值;";
   cin>>target;
    temp=search(num_arr,target);
    vector<vector<int> >::iterator iter;
    for (iter = temp.begin(); iter != temp.end(); iter++)   //遍历二维vector
    {
        for (int i = 0; i < (*iter).size(); i++)
         {
         cout << (*iter)[i] << " " ;
         }
         cout<<endl;
    }
     

 } 

 定义的search子函数返回结果是一个二维的vector,作用是保存所有满足结果的下标组合

它的结构如下图示意(有点丑不要介意):还是以最开始举得例子说:二维vectro类似与二维数组,可是它的长度是可以不断加的,可数组不能,在事先不知道组合个数的情况下,用vector是较好的选择。可以从示意图存入的值为满足要求的所有组合的下标,(0,3)是二维向量的第一个元素,它自己本身也是一个向量,只不过本身的长度在这里都是2,所以也可以把这里替换为一个长度为二的数组;(1,2)为二维向量的第二个元素。

 程序运行结果:我这里把数组的长度改为10了,所以输入数列有十个数,target设置为10,输出了所有的组合

原文地址:https://www.cnblogs.com/victorywr/p/12752985.html