题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1027
题目大意:给出一个n和一个m,要求求出数列1,2,3……n的第m个全排列
解题思路:字典序全排列,今天突然发现C++的algorithm函数库里已经实现了求下一个和上一个字典序全排列的函数,于是直接使用next_permutation函数解决。使用方法为:next_permutation(num+1,num+n+1);前一个参数是排列数组的开始位置,后一个是结束位置。
AC代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n,m;
int num[1005];
while(cin>>n>>m)
{
memset(num,0,sizeof(num));
for(int i=1;i<=n;i++)
num[i] = i;
m--;
while(m--)
{
next_permutation(num+1,num+n+1);
}
for(int i=1;i<=n;i++)
{
if(i==1)cout<<num[i];
else cout<<" "<<num[i];
}
cout<<endl;
}
return 0;
}