Suppose n<=32, we can enumerate C(k, n), with bits representing absence or presence, in the following way:
#include <iostream> #include <vector> #include <bitset> using namespace std; bitset<32> getComb(const vector<int> &comb) { bitset<32> bitcombs; for (int i=0; i<comb.size(); ++i) bitcombs.set(comb[i], true); return bitcombs; } bool nextComb(vector<int> &comb, int n) { int k = comb.size(), i = k - 1; ++comb[i]; while (i>=1 && comb[i]>=n-k+1+i) ++comb[--i]; if (comb[0] > n-k) return false; for (++i; i<k; ++i) comb[i] = comb[i-1] + 1; return true; } int main() { int n = 3, k = 2; vector<int> comb(k); for (int i=0; i<k; ++i) comb[i] = i; do { cout<<getComb(comb).to_ulong()<<endl; } while (nextComb(comb, n)); return 0; }
01111->10111->11011->11101->11110
So, could you find the pattern?