问题描述:
设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; |
} |