在这个题目中,我们仿照兑换零钱的思路,进行解析,int a[]={1,5,6,48,12}; int b[5]={0};,其中数组a中是待选元素的集合,b对应的相应坐标指的是a数组中对应坐标的值是否存在。,与兑换零钱不同的是sum不但要符合我们的需求,同时b中所有的元素必须是0或者1,不能为其他的数值。现在代码如下:
int a[]={1,5,6,48,12};
int b[5]={0};
int g_sum=6;
void getSum(int sum,int index)
{
if(sum==g_sum)
{
for(int i=0;i<5;i++)
{
if(b[i]>=2)
{
return;
}
}
//执行到此才是符合条件的
for(int i=0;i<5;i++)
{
if(b[i]==1)
{
cout<<a[i]<<" ";
}
}
cout<<endl;
}
else if(sum>g_sum)
{
return;
}
else
{
for(int i=index;i<5;i++)
{
b[i]++;
getSum(sum+a[i],i);
b[i]--;
}
}
}
int main()
{
getSum(0,0);
return 0;
}