快来帮忙看看tle

为啥第k个排列tle了啊,我觉得没问题啊?
快来帮忙看看。
#include
using namespace std;
int ans[15],vis[15]={0};
int n,cnt=0;
void dfs(int,int);
int main(){
cin>>n;
for(int i=1;i<=n;i++){
dfs(1,i);
}
}
void dfs(int k,int last){
if(k==last+1){
cnt++;//第几项计算
if(n==cnt){//看看项数是否匹配
for(int i=1;i<k;i++){
cout<<ans[i]<<’ ';
}
}

	return;
}
for(int i=1;i<=last;i++){
	if(vis[i]==0){
		ans[k]=i;
		vis[i]=1;
		dfs(k+1,last);
		vis[i]=0;
	}
	
}

}

7 个赞

题目:我们将所有的全排列按照如下规则进行排序:

如果长度不同,那么长度小的排前面;否则,字典序小的排前面。

请找到按照这个规则排序得到的第n 个排列。
样例
输入:6 输出:2 1 3

6 个赞

@王梓涵 代码不太全,在下面重新发下吧?不太好复制诶

5 个赞

ok

6 个赞

#include
using namespace std;
int ans[15],vis[15]={0};
int n,cnt=0;
void dfs(int,int);
int main(){
cin>>n;
for(int i=1;i<=n;i++){
dfs(1,i);
}
}
void dfs(int k,int last){
if(k==last+1){
cnt++;//第几项计算
if(n==cnt){//看看项数是否匹配
for(int i=1;i<k;i++){
cout<<ans[i]<<’ ';
}
}

	return;
}
for(int i=1;i<=last;i++){
	if(vis[i]==0){
		ans[k]=i;
		vis[i]=1;
		dfs(k+1,last);
		vis[i]=0;
	}
	
}

}

6 个赞

@王梓涵
问题
1.判断if(cnt == n)里的输出 的空格的单引号有个是全角
2.判断if(cnt == n)还要在这个输出后加个exit(0)代表结束整个程序,而return在dfs()中只是结束某个分支

5 个赞

ok

6 个赞

懂了

6 个赞

谢谢

6 个赞

next_permutation是个好东西

4 个赞

666

4 个赞

什么鬼,都解决了,好几天前的事情了,还举报

666!

1 个赞

image

1 个赞