一、next_permutation()函数
next_permutation函数用于生成当前序列的下一个排列。它按照字典序对序列进行重新排列,如果存在下一个排列,则将当前序列更改为下一个排列,并返回true;如果当前序列已经是最后一个排列,则将序列更改为第一个排列,并返回 false。
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n,arr[10];
cin>>n;
for(int i=0;i<n;++i)
{
cin>>arr[i];
}
bool tag=true;
while(tag)
{
for(int i=0;i<n;++i)
{
cout<<arr[i]<<" ";
}
cout<<"\n";
tag=next_permutation(arr,arr+n);
}
return 0;
}
next_permutation函数进行了全排列并以从小到大的升序进行全排列。
二、prev_permutation函数
prev_permutation函数与next_permutation 函数相反,它用于生成当前序列的上一个排列。它按照字典序对序列进行重新排列,如果存在上一个排列,则将当前序列更改为上一个排列,并返回true;如果当前序列已经是第一个排列,则将序列更改为最后一个排列,并返回false。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,arr[10];
cin>>n;
for(int i=0;i<n;++i)
{
cin>>arr[i];
}
do{
for(int i=0;i<n;++i) cout<<arr[i]<<" ";
cout<<endl;
}while(prev_permutation(arr,arr+n));
return 0;
}
next_permutation函数进行了全排列并以从大到小的升序进行全排列。
三、例题
(1)思路:
由题意知,最小的值为12345其大小代表为1,12354其大小代表为2,其中最大值54321代表为120,该题将给出的数字进行全排列,并且排列顺序从小到大按顺序排列,则用c++,STL中next_permutation函数。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,a[10000];
cin>>n>>m;
for(int i=1;i<=n;++i)
{
cin>>a[i];
}
for(int i=1;i<m;++i)
{
next_permutation(a+1,a+n+1);
}
for(int i=1;i<=n;++i)
{
cout<<a[i]<<" ";
}
return 0;
}