next_permutation函数将按字母表顺序生成给定序列的下一个较大的排列,直到整个序列为降序为止。prev_permutation函数与之相反,是生成给定序列的上一个较小的排列。
这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件<algorithm>
使用方法:next_permutation(数组头地址,数组尾地址);若下一个排列存在,则返回真,如果不存在则返回假若求上一个排列,则用prev_permutation。
[2004年NOIP普及组] 火星人
思路:将外星人所表示的数转化成人类的数字,再+m后,转化成外星人手指排列的顺序。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[10005];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>a[i];
//12345 编号1 m=3-->12453
//213 编号3 m=2-->312
for(int i=1;i<=m;i++)
next_permutation(a,a+n);//排列
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
标签:排列,NOIP,int,next,火星人,2004,permutation From: https://www.cnblogs.com/xdzxyingrui/p/16617779.html