
问题描述:
设R={ r1, r2, ..., rn}是要进行排列的n个元素。其中元素r1, r2, ...,rn可能相同。试设计一个算法,计算出这n 个元素的所有不同排列数。
Input
每组测试数据首先是n(1<=n<=500),接着是待排列的n个元素(小写字母)。
Output
输出排列总数。
Sample Input
4 aacc
Sample Output
6
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int len=510;
int n,ans;
char list[len];
int ok ( int k,int i )
{
if ( i>k )
{
for ( int t=k; t<i; t++ )
{
if ( list[t]==list[i] )
return 0;
}
}
return 1;
}
void findResult ( int k )
{
if ( k==n-1 )
{
ans++;
}
else
{
for ( int i=k; i<n; i++ )
{
if ( ok ( k,i ) )
{
swap ( list[k],list[i] );
findResult ( k+1 );
swap ( list[k],list[i] );
}
}
}
}
int main()
{
while ( cin>>n )
{
ans=0;
for ( int i=0; i<n; i++ )
{
cin>>list[i];
}
findResult ( 0 );
cout<<ans<<endl;
}
return 0;
}



