就是求第后m个排列
有个函数next_permutation可以用
算法思想(我能看懂的一篇):http://blog.csdn.net/HyJoker/article/details/50899362
代码:
#include <iostream>
#include <algorithm>
#define For(i,l,r) for(int i=l;i<=r;++i)
using namespace std;
int n,m,xl[10001];
void add()
{
int xl2[10001];
int pos,pos2=0;
for(int i=n;i>1;--i)
{
if(xl[i-1]<xl[i])
{pos=i-1;break;}
}
For(i,pos,n)
{
if(xl[i]>xl[pos]&&(xl[i]<xl[pos2]||!pos2))
pos2=i;
}
swap(xl[pos],xl[pos2]);
int len=n-pos;
For(i,pos+1,n)
{
xl2[i-pos]=xl[i];
}
sort(xl2+1,xl2+len+1);
For(i,pos+1,n)
{
xl[i]=xl2[i-pos];
}
}
int main()
{
cin>>n>>m;
For(i,1,n)
{
cin>>xl[i];
}
For(i,1,m)
add();
For(i,1,n)
cout<<xl[i]<<' ';
return 0;
}
STL实现(正好学习了next_permutation()函数)
#include <iostream>
#include <algorithm>
#define For(i,l,r) for(int i=l;i<=r;++i)
using namespace std;
int n,m,xl[10001];
int main()
{
cin>>n>>m;
For(i,0,n-1)
cin>>xl[i];
For(i,1,m)
next_permutation(xl,xl+n);
For(i,0,n-1)
cout<<xl[i]<<' ';
return 0;
}