题目描述
设R={ r1, r2 , …, rn}是要进行排列的n个小写字母。其中r1, r2 , …, rn可能相同。试设计一个算法,列出R的所有不同排列。
【编程任务】
给定n 以及待排列的n 个小写字母。计算出这n 个小写字母的所有不同排列。
输入
文件的第1 行是字母个数n,1≤n≤500。接下来的1 行是待排列的n个小写字母。
输出
计算出的n个小写字母的所有不同排列,按字典序从小到大输出。最后1行中的数是排列总数。
样例输入 复制
4
aacc
样例输出 复制
aacc
acac
acca
caac
caca
ccaa
6
参考代码来啦:
#include<bits/stdc++.h>
using namespace std;
int n,sum,p[10001];
char a[10001];
void o(int x)
{
if(x==n)
{
sum++;
for(int i=0;i<n;i++)
{
printf("%c",a[i]);
}
printf("\n");
return;
}
for(int i=1;i<=26;i++)
{
if(p[i]>0)
{
a[x]=i+96;
p[i]--;
o(x+1);
p[i]++;
}
}
}
int main()
{
string s;
scanf("%d",&n);
cin>>s;
for(int i=0;i<s.size();i++)
{
p[s[i]-96]++;
}
o(0);
cout<<sum;
}