实质是使用C++库中自带的函数next_permutation(),括号内是需要排列的数组下标(begin,end),需要声明头文件<algorithm>
以 牛客竞赛 老子的全排列呢 为例题
使用方法如下(代码):
这个题是输出1-8的全排列
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main() { int a[8]={1,2,3,4,5,6,7,8}; do//一个循环 ,内容为对当前排列进行的操作 { for(int i=0;i<8;i++) { printf("%d",a[i]); if(i!=7) printf(" "); } printf(" "); } while(next_permutation(a,a+8));//while内放对应函数 return 0; }
题 hdu1027 Ignatius and the Princess II
是要求输出1-n的第m个排列
代码如下:
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main() { int n,m; while(cin>>n>>m) { int a[1010]; for(int i=1;i<=n;i++) { a[i]=i; } sort(a+1,a+n+1);//排序,从第一个字典序开始排列 int num=1;//第一个字典序的排列标记为第一个 do//当不是第m个排列时继续调用next_permutation()函数进行重排 { if(num==m) { for(int i=1;i<=n;i++) { if(i!=1) { printf(" "); } printf("%d",a[i]); } break; } num++;//不符合则计数 } while(next_permutation(a+1,a+n+1)); cout<<endl; } return 0; }