题目描述
设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
设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<stdio.h>
#include<string.h>
int n,i,s,a[1000],b[1000],r;
char c[1000];
int f(int step)
{
int r;
if(step==n+1)
{
s++;
for(r=1;r<=n;++r)
printf("%c",b[r]+96);
printf("\n");
return 0;
}
for(r=1;r<=26;++r)
if(a[r]>0)
{
b[step]=r;
a[r]--;
f(step+1);
a[r]++;
}
}
int main()
{
scanf("%d",&n);
scanf("%s",c);
for(i=0;i<n;i++)
a[c[i]-96]++;
f(1);
printf("%d\n",s);
return 0;
}