fork download
  1. #include <array>
  2. #include <bitset>
  3. #include <iostream>
  4.  
  5. template <std::size_t N>
  6. bool increase(std::bitset<N>& bs)
  7. {
  8. for (std::size_t i = 0; i != bs.size(); ++i) {
  9. if (bs.flip(i).test(i) == true) {
  10. return true;
  11. }
  12. }
  13. return false;
  14. }
  15.  
  16. template <typename T, std::size_t N>
  17. void print_combinaison(const std::array<T, N>& a)
  18. {
  19. std::bitset<N> bs;
  20.  
  21. do {
  22. for (std::size_t i = 0; i != N; ++i) {
  23. if (bs.test(i)) {
  24. std::cout << a[i] << " ";
  25. }
  26. }
  27. std::cout << std::endl;
  28. } while (increase(bs));
  29. }
  30.  
  31. int main()
  32. {
  33. const std::array<int, 5> a {1, 2, 3, 4, 5};
  34. print_combinaison(a);
  35. return 0;
  36. }
  37.  
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
1 
2 
1 2 
3 
1 3 
2 3 
1 2 3 
4 
1 4 
2 4 
1 2 4 
3 4 
1 3 4 
2 3 4 
1 2 3 4 
5 
1 5 
2 5 
1 2 5 
3 5 
1 3 5 
2 3 5 
1 2 3 5 
4 5 
1 4 5 
2 4 5 
1 2 4 5 
3 4 5 
1 3 4 5 
2 3 4 5 
1 2 3 4 5