fork download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. void composition(int n, int k, int last, std::string s) {
  5. if (k == 0) {
  6. if (n == 0)
  7. std::cout << s << std::endl;
  8. return;
  9. }
  10. composition(n - last + 1, k - 1, last - 1, s + ' ' + std::to_string(last - 1));
  11. composition(n - last, k - 1, last, s + ' ' + std::to_string(last));
  12. composition(n - last - 1, k - 1, last + 1, s + ' ' + std::to_string(last + 1));
  13. }
  14.  
  15. int main()
  16. {
  17. int n = 3;
  18. int k = 6;
  19. for (int l = (2 * n - k * (k - 1)) / (2 * k);
  20. l <= (2 * n + k * (k - 1) + 2 * k - 1) / (2 * k); l++)
  21. composition(n - l, k - 1, l, std::to_string(l));
  22. }
Success #stdin #stdout 0s 4348KB
stdin
Standard input is empty
stdout
-2 -1 0 1 2 3
-1 -1 0 1 2 2
-1 0 0 1 1 2
-1 0 0 1 2 1
-1 0 1 0 1 2
-1 0 1 1 1 1
-1 0 1 2 1 0
0 -1 0 1 1 2
0 -1 0 1 2 1
0 0 0 0 1 2
0 0 0 1 1 1
0 0 1 0 1 1
0 0 1 1 0 1
0 0 1 1 1 0
0 1 0 0 1 1
0 1 0 1 0 1
0 1 0 1 1 0
0 1 1 0 0 1
0 1 1 0 1 0
0 1 1 1 0 0
0 1 2 1 0 -1
1 0 -1 0 1 2
1 0 0 0 1 1
1 0 0 1 0 1
1 0 0 1 1 0
1 0 1 0 0 1
1 0 1 0 1 0
1 0 1 1 0 0
1 1 0 0 0 1
1 1 0 0 1 0
1 1 0 1 0 0
1 1 1 0 0 0
1 1 1 1 0 -1
1 2 1 0 -1 0
1 2 1 0 0 -1
2 1 0 -1 0 1
2 1 0 0 0 0
2 1 0 1 0 -1
2 1 1 0 -1 0
2 1 1 0 0 -1
2 2 1 0 -1 -1
3 2 1 0 -1 -2