有重复元素的排序问题c语言,有重复元素的排列问题

问题描述:设R={ r1, r2, ..., rn}是要进行排列的n个元素。其中元素r1, r2, ...,rn可能相同。试设计一个算法,计算出这n个元素的所有不同排列数。Input每组测试数据首先是n(1<=n<=500),接着是待排列的n个元素(小写字母)。Output输出排列总数。Sample Input

4 aacc

Sample Output

6#include

#include

#include

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

{

if ( list[t]==list[i] )

return 0;

}

}

return 1;

}

void findResult ( int k )

{

if ( k==n-1 )

{

ans++;

}

else

{

for ( int i=k; 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

{

cin>>list[i];

}

findResult ( 0 );

cout<

}

return 0;

}