题解 P1157 【组合的输出】

· · 题解

楼下的dalao们都是用dfs,回溯等算法做的,于是我在这里献上一个STL解法

algorithm库里面有一个函数叫next_permutation,可以快速生成全排列,具体参见这里

上超短代码:

#include<cstdio>
#include<algorithm>
int x[30];//x[i]代表第i选或不选,0代表选,1代表不选
using namespace std;
int main(){
    int n,r;
    scanf("%d%d",&n,&r);//读入n、r
    for(int i=r+1;i<=n;++i)
        x[i]=1; //赋初始值
    do{
        for(int i=1;i<=n;++i)
            if(x[i]==0) printf("%3d",i);//如果是0就输出,注意三个常宽
        printf("\n");//换行
    }while(next_permutation(x+1,x+n+1));//生成下一个
    return 0;//返回
}