找回密码
 中文实名注册
查看: 219|回复: 2

问题 K: 字符串的全排列-Contest4009 - 2022春长训提高第12课测试

[复制链接]

702

主题

1094

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22150
发表于 2022-6-12 19:25:38 | 显示全部楼层 |阅读模式
给出一个只由小写字母且字母互不相同的字符串,输出其按字典序从小到大的全排列。

输入:
一个字符串,长度不超过8。
输出:
若干行,每行一个字符串
输入
abc
输出
abc
acb
bac
bca
cab
cba


回复

使用道具 举报

702

主题

1094

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22150
 楼主| 发表于 2022-6-12 19:25:53 | 显示全部楼层
[C++] 纯文本查看 复制代码
// 求str的全排列算法
//  其中str范围区间 [a,b] 
#include <bits/stdc++.h>
using namespace std;
void perm(string str,int a,int b){ 
 if(a==b){
//  输出长度为 b+1 
  for(int i=0;i<=b;i++){
   cout<<str[i];
  }
  cout<<endl;
 }
 for(int k=a;k<=b;k++){
  swap(str[k],str[a]);
  perm(str,a+1,b);
 //swap(str[k],str[a]); 交换函数 
 }
}
int main(){
 string str;
 cin>>str;
 int n= str.size();
 perm(str,0,n-1);
}
回复

使用道具 举报

1

主题

57

帖子

257

积分

中级会员

Rank: 3Rank: 3

积分
257
发表于 2022-6-14 19:35:18 | 显示全部楼层
[C++] 纯文本查看 复制代码
#include <bits/stdc++.h>
using namespace std;
bool b[15];
int n;
void dfs(int dep,int s)
{
	if(dep>n)
	{
		cout<<s<<endl;
		return ;
	}
	for(int i=1;i<=n;i++)
	{
		if(b[i])
		{
			continue;	
		}
		b[i]=true;
		dfs(dep+1,s*10+i);
		b[i]=false;
	}
}
int main()
{
	cin>>n;
	dfs(1,0);
	return 0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文实名注册

本版积分规则

小黑屋|东台市机器人学会 ( 苏ICP备2021035350号-1;苏ICP备2021035350号-2;苏ICP备2021035350号-3 )

GMT+8, 2024-11-22 01:49 , Processed in 0.037898 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表