用c++实现,输出给定序列按字典序的 r 组合,按照所有 n 个元素出现与否的 01 标记串 xnxn − 1, ..., x1 的字典序输出
时间: 2024-02-22 13:58:09 浏览: 141
以下是用 C++ 实现的代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void combinations(vector<int>& arr, int r, vector<vector<int>>& result, vector<int>& temp, int start) {
if (r == 0) {
result.push_back(temp);
} else {
for (int i = start; i <= arr.size() - r; i++) {
temp.push_back(arr[i]);
combinations(arr, r-1, result, temp, i+1);
temp.pop_back();
}
}
}
void binary_combinations(int n, vector<vector<int>>& result) {
for (int i = 0; i < (1 << n); i++) {
vector<int> bin_str;
int num = i;
for (int j = 0; j < n; j++) {
bin_str.push_back(num % 2);
num /= 2;
}
reverse(bin_str.begin(), bin_str.end());
result.push_back(bin_str);
}
}
int main() {
// 输出给定序列按字典序的 r 组合
vector<int> arr = {1, 2, 3, 4};
int r = 2;
vector<vector<int>> result;
vector<int> temp;
combinations(arr, r, result, temp, 0);
for (auto& comb : result) {
for (int x : comb) {
cout << x << " ";
}
cout << endl;
}
// 按照所有 n 个元素出现与否的 01 标记串 xnxn-1,...,x1 的字典序输出
int n = 3;
vector<vector<int>> bin_result;
binary_combinations(n, bin_result);
for (auto& bin_str : bin_result) {
for (int x : bin_str) {
cout << x << " ";
}
cout << endl;
}
return 0;
}
```
其中 `combinations` 函数用于输出给定序列按字典序的 r 组合,`binary_combinations` 函数用于按照所有 n 个元素出现与否的 01 标记串 xnxn-1,...,x1 的字典序输出。两个函数的结果都存储在 `result` 向量中,可以通过遍历 `result` 向量输出结果。
阅读全文