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