用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

有重复元素的排列问题

2012-09-20 作者: 神马举报

[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<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;
}



网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...