递归函数,用于使用位掩码 c++ 显示集合的所有子集
Recursive function to display all subsets of a set using bitmask c++
我正在尝试编写一个递归函数,以使用位掩码显示n元素集的所有可能的k元素子集。
到目前为止,我有这个代码。
#include <iostream>
using namespace std;
void combinations(int *, int, int, int,int c);
int main()
{
int n = 5;
int k = 3;
int bitMask[5] = {0};
combinations(bitMask,0,n,k,0);
}
void combinations(int* arr, int start, int n, int k,int c)
{
if(c==3)
{
for(int i = 0; i < n; i++)
{
cout<<arr[i];
}
cout<<endl;
}else
{
for(int i = start; i < n; i++)
{
arr[i] = 1;
combinations(arr,i+1,n,k,c+1);
}
}
}
但是我的输出是:
11100
11110
11111
11111
11111
11111
11111
11111
11111
11111
有人可以给我一些关于如何更改函数以获得这样的结果的指导方针
吗11100
11010
11001
10110
10101
01110
01101
01011
00111
提前感谢,我仍然对递归很糟糕。
下面的代码运行良好。
#include <iostream>
using namespace std;
void combinations(int *, int, int, int,int c);
int main()
{
int n = 5;
int k = 3;
int bitMask[5] = {0};
combinations(bitMask,0,n,k,0);
}
void combinations(int* arr, int start, int n, int k,int c)
{
if(c==3)
{
for(int i = 0; i < n; i++)
{
cout<<arr[i];
}
cout<<endl;
}else
{
for(int i = start; i < n; i++)
{
arr[i] = 1;
combinations(arr,i+1,n,k,c+1);
arr[i] = 0;
}
}
}
你忘了
arr[i] = 0;
从递归combinations()
返回后。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 处理多个异常集合的C++方法
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 如何将ampl中的集合表示为c++中的向量
- 检查值是否在集合p1和p2中,但不在p3中
- 带过滤器的现代迭代c++集合
- 程序崩溃并显示"std::out_of_range"错误
- 如何将结构插入到集合中并打印集合的成员
- 集合上的输出迭代器:assign和increment迭代器
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 显示字符串的集合和子集
- 如何从集合C 显示某个项目
- 递归函数,用于使用位掩码 c++ 显示集合的所有子集
- C++显示六个数字的随机集合
- 使用0来显示不存在元素的集合的子集
- 测试集合的相等性而不显示不匹配