题目描述
集合S中有n个元素,其中的元素可能重复,设计一个算法,计算出S的不同排列字符全部由小写字母组成,
输出按照字典序输出
n <= 9
输入
第一行一个整数n
第二行一个字符串包含n个字母
输出
所有的全排列
最后一行输出个数
样例输入
4
aacc
样例输出
aacc
acac
acca
caac
caca
ccaa
6
代码如下
#include<cstdio>
#include<iostream>
using namespace std;
int main(){
int len;
int count=0;
char str[9];
scanf("%d",&len);
cin>>str;
int i;
int j;
int flag=1;
for(i=0;i<len;i++){
for(j=i+1;j<len;j++){
if(str[i]-str[j]>0){
swap(str[i],str[j]);
}
}
}
while(flag){
for(int k=0;k<len;k++){
cout<<str[k];
}
count++;
printf("\n");
for(i=len-2;i>=0 && str[i]>=str[i+1];i--);
if(i<0){
printf("%d\n",count);
flag=0;
}
for(j=len-1;j>i && str[j]<=str[i];j--);
swap(str[i],str[j]);
for(int m=i+1,n=len-1;m<n;m++,n--)
swap(str[m],str[n]);
}
return 0;
}
运行结果如下