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 vocalele 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 vocalele 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
dorel
Ieșire
doler dorel loder lored rodel roled
Explicație
Anagramele sunt afișate în ordine lexicografică, iar literele o
și e
rămân pe pozițiile inițiale.
#include <bits/stdc++.h> using namespace std; int n , x[30] , p[30] , cnt; char cuv[30] , s[30]; int voc(char a) { return a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u'; } 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++]]; 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); }