题目描述
时间:0.2 空间:32M
题目描述:
我们将所有的全排列按照如下规则进行排序:
如果长度不同,那么长度小的排前面;否则,字典序小的排前面。
请找到按照这个规则排序得到的第n 个排列。
输入格式:
一个正整数表示 n。
输出格式:
一个序列表示答案。
样例输入1:
6
样例输出1:
2 1 3
约定:
1<=n<=400000
提示:
我的代码
#include<bits/stdc++.h>
using namespace std;
int len=1;
int n;
int k;
int vis[105];
int a[105];
int cnt=0;
void f(int step)
{
if(step>len)
{
cnt++;
if(cnt==k)
{
for(int i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
exit(0);
}
return ;
}
for(int i=1;i<=n;i++)
{
if(vis[i]==0)
{
a[step]=i;
vis[i]=1;
f(step+1);
vis[i]=0;
}
}
}
int main()
{
cin>>k;
while(1)
{
f(1);
len++;
}
}
编的这个循环(递归)好像有点问题 请各位看看