题解 P1157 【组合的输出】

tony123456

2018-10-08 21:28:24

Solution

楼下的dalao们都是用dfs,回溯等算法做的,于是我在这里献上一个STL解法 algorithm库里面有一个函数叫next_permutation,可以快速生成全排列,具体[参见这里](https://blog.csdn.net/howardemily/article/details/68064377) 上超短代码: ```cpp #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;//返回 } ```