题目链接
是个水题。需要注意一点:m和n可能为0。为了避免行末空格而使用的输出方式导致我在m=0时输出了第一位,WA了一发
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #include <map> #include <set> #include <queue> #include <stack> #include <cctype> using namespace std; int p[30], n, m; void cm(int k, int ed) { int i; if (m == 0) //不加这个会WA return; if (k > m) { printf("%d", p[1]); //等于0的时候这一行也会执行,但不该执行 for (i = 2; i <= m; i++) printf(" %d", p[i]); printf("\n"); return; } for (i = ed; i <= n - m + k; i++) { p[k] = i; cm(k + 1, i + 1); } } int main() { scanf("%d%d", &n, &m); cm(1, 1); return 0; }