236
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