给出一个没有重复元素的集合如{1 2 3 4}可从这个集合中选取任意个元素,求有多少种选取方法使得这些元素相加=k

#include<stdio.h>
int main(void)
{
int n,k,i,j;
int a[10];
while(scanf("%d%d",&n,&k)!=EOF)
{
int count=0,temp;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0,j=n-1;i<j;)
{
if(a[i]+a[j]==k)
{
i++;
j--;
count++;
}
else
{
j--;
}
}
printf("%d\n",count);
}
return 0;
}

https://www.nowcoder.com/questionTerminal/c333d551eb6243e0b4d92e37a06fbfc9?answerType=1&f=discussion 递归回溯出所有子集来判断这个子集是不是等于k?