求助:还是一关
  • 板块学术版
  • 楼主Chalage_2010
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/12/18 16:32
  • 上次更新2023/10/24 07:18:23
查看原帖
求助:还是一关
760690
Chalage_2010楼主2022/12/18 16:32

题目描述

时间: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++;
	}
}

编的这个循环(递归)好像有点问题 请各位看看

2022/12/18 16:32
加载中...