前言
一道关于STL排列组合函数next_permutation()的应用。
一、题目描述
给定n个数字,从1到n,要求输出第m小的序列。
输入:数字n和m,1<=n<=1000,1<=m<=10000。
输出:输出第m小的序列。
二、解析
这里的序列指的是字典序列,比如n=4,那么最小的字典序列就是1234,其次是1243,1324,1242…以此类推next_permutation()函数提供的是下一次的字典序列,输入的参数可以是数组的上下界,类似于sort()函数,并将结果返回到数组中。
三、程序代码
#include<bits/stdc++.h>
using namespace std;
int a[1001];
int main()
{
int n,m;
while(cin>>n>>m) //遇到EOF结束
{
for(int i=1;i<=n;i++)
{
a[i]=i;
}
int b=1;
do
{
if(b==m) break;
else
{
b++;
}
}while(next_permutation(a+1,a+n+1)); //操作的区间为a+1到a+n
for(int i=1;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<a[n]<<endl;
}
return 0;
}