fbpx

Problema #3329 – NumarareAnagrame – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se dă un cuvânt format numai din litere mici ale alfabetului englez. Determinați câte cuvinte distincte se pot forma cu literele sale – numărul de anagrame ale sale.

Date de intrare

Programul citește de la tastatură un cuvânt.

Date de ieșire

Programul va afișa pe ecran numărul C, reprezentând numărul cerut.

Restricții și precizări

  • cuvântul dat va avea cel mult 20 de litere;

Exemplu

Intrare

ababa

Ieșire

10

Explicație

Cele 10 cuvinte sunt: aaabb, aabab, aabba, abaab, ababa, abbaa, baaab, baaba, babaa, bbaaa.

#include <bits/stdc++.h>

using namespace std;

char s[21];
int f[200];
long long int fact = 1;

long long int facto(int i){
    long long int fct = 1;
    if(i == 0)
        return 1;
    else
        for(int j = 1; j <= i; ++j)
            fct *= j;
    return fct;
}

int main(){
    cin >> s;
    for(int i = 1; i <= strlen(s); ++i)
        fact *= i;
    int i = 0;
    while(s[i]){
        f[s[i]] ++;
        i++;
    }
    for(int i = 'a'; i <= 'z'; ++i)
        fact /= facto(f[i]);
    cout << fact;
    return 0;
}
Comentarii

S-ar putea sa iti placa