# include <stdio.h>
//生成从1到n中取m个数的组合,组合从小到大
void born(int n, int m)
{
int i, j, temp;
int a[100];
for (i = 0; i<m; i++) //初始化第一个组合并输出
{
a[i] = i+1;
printf("%d", a[i]);
}
printf("\n");
i = 0;
//循环终止条件:当组合中第一个数不小于它所能成为的最大值时,退出循环
while (a[i]<n-m+i+1 || i!= 0)
{
temp = 0; //用来判断组合中是否有数已经达到它的最大值
for (j = 0; j<m; j++)
{
if (a[j]>=n-m+j+1) //组合中有数达到了最大值,temp=1,终止循环
{
temp = 1;
break;
}
}
i = j-1;
a[i]+=1; //当前应该改变的数+1
if (temp) //有数达到最大值
{
if (i == 0) //如果达到最大值的数是第一个,让之后的数为a[i]+1,a[i]+2......
{
for (j = 1; j<m; j++)
a[j] = a[i]+j;
}
a[i+1] = a[i]+1;
temp = 0;
}
for (j = 0; j<m; j++) //输出组合数
printf("%d", a[j]);
printf("\n");
}
}
int main()
{
int n, m;
scanf("%d%d", &n, &m);
born(n, m);
return 0;
}