定义
next_permutation(start,end)表示在[ start,end)内存的数组中产生严格的下一个字典序排序
例题
P1706 全排列问题
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int a[10];
int main(){
long long A,B,C,x,y,z,cnt=0;
cin>>A>>B>>C;
for(int i=1;i<=9;i++)
a[i]=i;
do{
x=a[1]*100+a[2]*10+a[3];
y=a[4]*100+a[5]*10+a[6];
z=a[7]*100+a[8]*10+a[9];
if(x*B==y*A&&y*C==z*B)
cout<<x<<" "<<y<<" "<<z<<endl,cnt++;
}while(next_permutation(a+1,a+10));
if(!cnt) cout<<"No!!!";
}
P1706 全排列问题
#include<bits/stdc++.h>
using namespace std;
int n,a[10];
int main(){
cin>>n;
for(int i=1;i<=n;i++)
a[i]=i;
do{
for(int i=1;i<=n;i++)
printf("%5d",a[i]);
puts(""); //输出字符并且换行
}while(next_permutation(a+1,a+n+1));
return 0;
}
P1088 [NOIP2004 普及组] 火星人
#include<bits/stdc++.h>
using namespace std;
int n,m,a[10010];
int main(){
cin>>n>>m;
int num=0;
for(int i=0;i<n;i++)
cin>>a[i];
while(next_permutation(a,a+n)){
num++;//当num等于m时,说明已经加上小整数
if(num==m){
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
}
}
return 0;
}
解法2
#include<bits/stdc++.h>
using namespace std;
int a[10010],n,m;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
//先输入,再计数
while(m--)
//for(;m--;)
next_permutation(a+1,a+1+n);
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}