Cerința
Se citește de la tastatură un cuvânt s
format din cel mult 11
litere mici distincte. Să se genereze în ordine alfabetică și să se afișeze toate anagramele cuvântului s
în care consoanele sunt puncte fixe.
Date de intrare
Programul citește de la tastatură cuvântul s
.
Date de ieșire
Programul va afișa pe ecran pe rânduri separate anagramele cuvântului citit în care consoanele rămân pe pozițiile inițiale.
Restricții și precizări
- cuvântul
s
are cel mult11
caractere și este format din litere mici distincte
Exemplu
Intrare
sorina
Ieșire
sarino saroni sirano sirona sorani sorina
Explicație
Anagramele sunt afișate în ordine lexicografică, iar literele s
, r
și n
rămân pe pozițiile inițiale.
#include <bits/stdc++.h> using namespace std; int n , m , x[30] , p[30] , cnt; char cuv[30] , s[30]; int voc(char s) { if(s == 'a' || s == 'e' || s == 'i' || s == 'o' || s == 'u') return 1; else return 0; } int afisare() { int pp = 1; for(int i = 1 ; i <= n ; i++) if(!voc(cuv[i - 1])) cout << cuv[i - 1]; else cout << s[x[pp]] , pp++; cout << '\n'; } void back(int k) { for(int i = 1 ; i <= cnt ; i++) if(!p[i]) { x[k] = i; p[i] = 1; if(k == cnt) afisare(); else back(k + 1); p[i] = 0; } } int main() { cin >> cuv; n = strlen(cuv); for(int i = 0 ; i < n ; i++) if(voc(cuv[i])) s[++cnt] = cuv[i]; for(int i = 1 ; i <= cnt ; i++) for(int j = i + 1 ; j <= cnt ; j++) if(s[i] > s[j]) swap(s[i] , s[j]); back(1); }