题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
例如:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
实现过程如下:
采用冒泡法的思路,首先由第一个元素分别与后边的元素相加,判断是否与target相等,如果相等则将下标存入output_vec;然后在用第二个元素分别与后边的元素相加,重复以上步骤;然后进行操作符重载,处理output_vec数据,并以(a,b)的形式输出。
#include <iostream>
#include <vector>
using namespace std;
class two_numplus{
public:
bool input();
bool sum();
bool output();
int out_length()
{
return output_vec.size();
}
private:
int v_size;
vector<int> input_vec;
vector<int> output_vec;
int target;
};
ostream& operator<<(ostream &os,two_numplus &aa)
{
os<<"共有";
os<<aa.out_length()/2<<"组符合条件"<<endl;
return os;
}
bool two_numplus::input()
{
int temp;
cout<<"请输入目标值:"<<endl;
cin>>target;
cout<<"请输入数组大小:"<<endl;
cin>>v_size;
cout<<"请输入"<<v_size<<"个整数:"<<endl;
for(int i=0;i<v_size;i++)
{
cin>>temp;
input_vec.push_back(temp);
}
return true;
}
bool two_numplus::sum()
{
for(int i=0;i<v_size;i++)
{
for(int j=i+1;j<v_size;j++)
{
if(input_vec[i]+input_vec[j]==target)
{
output_vec.push_back(i);
output_vec.push_back(j);
}
}
}
return true;
}
bool two_numplus::output()
{
cout<<"符号条件的下标为:"<<endl;
for(int i=0;i<output_vec.size();i++)
{
if(i%2==0)
{
cout<<"("<<output_vec[i]<<" ";
}
if(i%2==1)
{
cout<<output_vec[i]<<")"<<endl;
}
}
return true;
}
void main()
{
two_numplus aaplus;
aaplus.input();
aaplus.sum();
aaplus.output();
cout<<aaplus;
system("pause");
}
调试结果如下: