#include <iostream> #include <vector> #include <functional> using namespace std; bool nextSubsetIndex(std::vector<int> &a, int n) { for (int i = a.size() - 1; i >=0; --i) { n--; if (a[i] < n) { int x = ++a[i]; for (int j = i + 1; j < a.size(); ++j) { a[j] = ++x; } return true; } } return false; } void generateSubset(int n, int k, std::function<void(const std::vector<int> &)> f) { std::vector<int> a(k); for (size_t i=0; i<k; ++i) { a[i] = i; } do { f(a); } while (nextSubsetIndex(a, n)); } int main() { int n, k; while (std::cin >> n >> k) { generateSubset(n, k, [](auto a) { for (auto x : a) { std::cout << x + 1 << ", "; } std::cout << '\n'; }); std::cout << "------\n"; } return 0; }
5 2 5 3
1, 2, 1, 3, 1, 4, 1, 5, 2, 3, 2, 4, 2, 5, 3, 4, 3, 5, 4, 5, ------ 1, 2, 3, 1, 2, 4, 1, 2, 5, 1, 3, 4, 1, 3, 5, 1, 4, 5, 2, 3, 4, 2, 3, 5, 2, 4, 5, 3, 4, 5, ------