题解 P1157 【组合的输出】
tony123456
2018-10-08 21:28:24
楼下的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;//返回
}
```