【题目描述】
设R={ r1, r2 , …, rn}是要进行排列的n个元素。其中元素r1, r2 , …, rn可能相同。试设计一个算法,列出R的所有不同排列。
给定n 以及待排列的n 个元素。计算出这n 个元素的所有不同排列。
输入
输入数据。第1 行是元素个数n,1≤n≤500。接下来的1 行是待排列的n个元素。
输出
计算出的n个元素的所有不同排列输出中。输出最后行的数是排列总数。
样例
【输入】
4
aacc
【输出】
aacc
acac
acca
caac
caca
ccaa
6
【参考代码】
#include<bits/stdc++.h>
using namespace std;
char a[251];
int n[27],s,sum=0;
void f(int k) {
if(k==s+1) {
for(int i=1;i<=s;i++)
printf("%c",a[i]);
printf("\n");
sum++;
return ;
}
for(int i=1;i<=26;i++)//从字母a找到字母z
{
if(n[i]!=0)
{
n[i]--;
a[k]=char(i+96);
f(k+1);//下一个字符
n[i]++;
}
else
continue;
}
}
int main() {
scanf("%d",&s);
for(int i=1; i<=s; i++) {
cin>>a[i];
n[a[i]-96]++;//每个字符的数量
}
f(1);
printf("%d",sum);
return 0;
}