思路:
求得这个数组的所有子集的情况,然后将子集数组的元素个数为k的子数组的所有元素求和,判断是否等于target如果等于打印子数组。
代码:
int target = 7;
void printvector(vector<int> arr)
{
for (int val : arr)
{
cout << val << " ";
}
return;
}
void fun(vector<int> &arr,vector<bool> &flag,int i)
{
if (i == arr.size())
{
vector<int> tmp;
for (int i = 0; i < arr.size(); ++i)
{
if (flag[i])
{
tmp.push_back(arr[i]);
}
}
int sum = 0;
if (tmp.size() == 3) {
for (int val : tmp) {
sum += val;
}
if (sum == target)
{
printvector(tmp);
}
}
}
else
{
flag[i] = true;
fun(arr, flag, i + 1);
flag[i] = false;
fun(arr, flag, i + 1);
}
}
int main()
{
vector<int> arr({ 1,2,3,4,5,6,7,8,9 });
vector<bool> flag(9);
fun(arr, flag, 0);
}