39.组合总和
这个题我是参考了别人的写法,刚看到题感觉特别简单,但是写着写着确实没有头绪,这道题用了回溯,如果不满足tar就一直循环,直到满足。
#include<iostream>
using namespace std;
int sum=0;
int a1[10];
void find(int *a,int tar,int len,int num,int loc)
{
if(sum>tar)
return;
else if(sum==tar){
for(int i=0;i<len;i++){
cout<<a1[i]<<" ";
}
cout<<"\n";
return;
}else{
int j=loc;//loc指的是上一次加到 a 数组的哪一位置了
for(int j=loc;j<num;j++){
sum = sum+ a[j];
a1[len]=a[j];
find(a,tar,len+1,num,loc);
sum=sum-a[j];
loc++;
}
}
}
int main()
{
int a[10001]={0};
int tar=0;
int num=0;
cin>>num;
for (int i=0;i<num;i++)
{
scanf ("%d",&a[i]);
}
cin>>tar;
find(a,tar,0,num,0);
return 0;
}