打印给定大小的集合的所有子集并计算子集
Print all subsets of given size of a set and count the subset
>生成具有不同元素的给定数组的大小 r 的所有可能子集。 在获得具有不同元素的给定数组的大小 R 的所有可能子集后,我需要帮助来计算子集。生成后如何计算不同元素的子集
#include <bits/stdc++.h>
using namespace std;
void combinationUtil(int arr[], int n, int r, int index, int data[], int i);
void printCombination(int arr[], int n, int r)
{
int data[r];
combinationUtil(arr, n, r, 0, data, 0);
}
void combinationUtil(int arr[], int n, int r, int index,int data[], int i)
{
int c=0;
if (index == r) {
for (int j = 0; j < r; j++) {
printf("%d ", data[j]);
}
printf("n");
return;
}
if (i >= n)
return;
data[index] = arr[i];
combinationUtil(arr, n, r, index + 1, data, i + 1);
combinationUtil(arr, n, r, index, data, i + 1);
}
int main()
{
int arr[] = { 0,1,2,3,4};
int r = 2;
int n = sizeof(arr) / sizeof(arr[0]);
printCombination(arr, n, r);
return 0;
}
output
0 1
0 2
0 3
0 4
1 2
1 3
1 4
2 3
2 4
3 4
number of subset 10
让我们用:next_permutation
.这将排列输入,在访问完所有排列后返回false
。
给定排序后的输入:int arr[]
我们可以执行以下操作:
do {
copy(cbegin(arr), cend(arr), ostream_iterator<int>(cout, " "));
cout << endl;
} while(next_permutation(begin(arr), end(arr)));
现场示例
此示例假定具有唯一的输入,在这种情况下,组合和排列是相同的。如果你没有独特的输入,你实际上是在要求这些数字的组合。next_combination
在这里的目的:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2639.pdf 如果您发现没有唯一的输入并使用它,则可以复制该实现。您还可以在此处了解有关next_combination
的更多信息:https://stackoverflow.com/a/35215540/2642059
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 计算总和为 x 的所有整数子集(包括负数)
- 打印给定大小的集合的所有子集并计算子集
- 动态规划:计算集合中存在多少个升序子集
- 计算 Mat OpenCV 子集的总和