[2004年NOIP普及组] 火星人

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;

 }

posted @ 2022-08-23 20:56  shanyingrui  阅读(235)  评论(0)    收藏  举报