是个水题。需要注意一点: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;
}