找一个长为n的数字排列以后的第K个排列,例子题目里给了,也不是很难理解,一下子就想起来一个STL的函数基本功能就是这样:
next_permutation 和 prev_permutation
bool next_permutation(num,num+n)//num数组里的前n个数字
功能就是找到下一个比现在大的数字排列(直接修改num数组),比如012的下一个是021,然后如果当前已经是最大的了就会返回FALSE。
同理prev_permutation函数就是找比现在小的数字排列。
利用这个函数可以直接做这个题了,不过坑点在于为什么我用printf超时了?
而用cout就过了????
不是说用cout和printf差不多甚至printf还比cout快么??
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int t,n,k,num[1050];
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&k);
memset(num,0,sizeof num);
for (int i = 0; i < n; i++)
scanf("%d",&num[i]);
for (int i = 0; i < k; i++)
next_permutation(num,num+n);
for (int i = 0; i < n; i++)
{
if(i != 0)
cout<<" ";
cout<<num[i];
}
cout<<endl;
}
}