fork(1) download
  1. #include <cassert>
  2. #include <cstdlib>
  3. #include <functional>
  4. #include <iostream>
  5. #include <string>
  6.  
  7. using Bits = std::string;
  8.  
  9. namespace {
  10. void binary(int n, int k, std::function<void(Bits)> yield) {
  11. if (k == 0) // no bits set
  12. yield(Bits(n, '0'));
  13. else if (n == k) // all bits set
  14. yield(Bits(k, '1'));
  15. else {
  16. assert(n > k && k > 0);
  17. binary(n - 1, k, [&yield](Bits bits) { yield("0" + bits); });
  18. binary(n - 1, k - 1, [&yield](Bits bits) { yield("1" + bits); });
  19. }
  20. }
  21. }
  22.  
  23.  
  24. int main() {
  25. int n, k;
  26. if(!(std::cin >> n >> k && n >= k && k >= 0))
  27. exit(EXIT_FAILURE);
  28.  
  29. binary(n, k, [](Bits bits) { std::cout << bits << '\n'; });
  30. }
  31.  
Success #stdin #stdout 0s 15232KB
stdin
4
3
stdout
0111
1011
1101
1110