用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

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

加载中,请稍后...