字符排列问题

问题:

有n个字母,列出由该字母组成的字符串的全排列(相同的排列只计一次)

输入:

第一行输入是字母个数n,1<=n<=20。接下来一行输入的是待排列的n个字母。

输出:

计算出的n 个字母的所有不同排列总数

例如:

输入:

aacc

输出:

6

分析:

求出全部的字符的组合排列,就是n的阶层

然后求出有重复字母的个数,这些个数的阶层,用总的阶层/这些数的阶层,依次进行,就是答案

代码:

#include

using namespace std;

int f(int n){

    int sum=1;

    for(int i=1;i<=n;i++){

        sum*=i;

    }

    return sum;

}

int main(){

    int n;

    cin>>n;

    string s;

    cin>>s;

    int sum1=f(n);//总排列数

    int p[26]={0};//用来记录重复数字的个数

    string s1="abcdefghijklmnopqrstuvwxyz";

    for(int i=0;i

        int k=s1.find(s[i]);

        p[k]++;

    }

    for(int i=0;i<26;i++){

        int sum2=1;

        if(p[i]>1){

            sum2=f(p[i]);

        }

        sum1=sum1/sum2;

    }

    cout<

    return 0;

}

结果:

你可能感兴趣的:(字符排列问题)