Two sum 问题:
如果假设输入一个数组nums和一个目标和 target,请你返回nums中能够凑出target的两个元素的值,比如输入nums = [1,3,5,6], target =9,那么算法返回两个元素[3,6]。可以假设只有且仅有一对儿元素可以凑出target
分析:
对于本问题,我们需要从第一个数开始依次往后遍历,看第一个数与后面的每一个数自组合后是否能凑出target,如果能输出就行,如果不行的话就让第二个数与后面的每一个数字组合(因为前面的数字已经试过了),直到第n-1个数字与第n个数字的组合。
所有情况:
用i表示第i个数字与后面的每一个数字组合,j从i+1到n表示从第i+1个数字到第n个数字与第i个数字之间的组合。所以i从1到n-1,j从i+1到n就表示了所有的组合情况。
限制条件:
只要a[i]与a[j]的和能够等于目标target就可以了。
满足条件后输出即可。
完整代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int a[100],target,n,i,j,sum;
cout<<"请输入数组长度"<<endl;
cin>>n;
cout<<"请输入数组各个元素"<<endl;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
cout<<"请输入目标target"<<endl;
cin>>target;
for(i=1;i<=n-1;i++)
{
for(j=i+1;j<=n;j++)
{
sum=a[i]+a[j];
if(sum==target)
{
cout<<a[i]<<" "<<a[j]<<endl;
}
}
}
return 0;
}
运行结果: