# PBinfo #3329 – NumarareAnagrame – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

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.

## Cod sursă C++

```cpp
#include <iostream>
#include <cstring>
#include <cassert>
using namespace std;
int F[26];
long long Fact(int n)
{
    long long R = 1;
    for(int i = 1 ; i <= n ; i ++)
        R *= i;
    return R;
}
int main()
{
    char s[201];
    cin >> s;
    assert(strlen(s) <= 20);
    for(int i = 0 ; s[i] ; i ++)
        F[s[i]-'a'] ++;
    int S = 0;
    for(int i = 0 ; i < 26 ; i ++)
        S += F[i];
    long long R = Fact(S);
    for(int i = 0 ; i < 26 ; i ++)
        R /= Fact(F[i]);
    cout << R;
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3329)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3329/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3329/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
