Se numește anagramă a unui cuvânt dat, un alt cuvânt ce conține toate literele primului, eventual în altă ordine.
Cerinţa
Se dă un cuvânt din cel mult 8
litere distincte. Să se afișeze, în ordine alfabetică, toate anagramele acestui cuvânt.
Date de intrare
Fişierul de intrare anagrame1.in
conţine pe pe prima linie un cuvânt S
, format din cel mult 8
litere distincte ale alfabetului englez.
Date de ieşire
Fişierul de ieşire anagrame1.out
va conţine toate anagramele cuvântului S
, fiecare pe o linie, în ordine alfabetică.
Exemplu
anagrame1.in
cal
anagrame1.out
acl alc cal cla lac lca
#include <bits/stdc++.h> using namespace std; ifstream cin("anagrame1.in"); ofstream cout("anagrame1.out"); int n , x[10] , p[10] , a[10]; char s[10]; void afisare() { for(int i = 1 ; i <= n ; i++) cout << s[x[i]]; cout << '\n'; } void back(int k)///k = poz la care am ajuns { for(int i = 0 ; i < n ; i++)///de unde se ia x[k] if(!p[i]) ///daca nu e pus anterior { x[k] = i;///pun elementul p[i] = 1;///l am folosit pe i if(k == n) afisare();///solutie else back(k + 1);///trec la poz urmatoare p[i] = 0;///marchez ca nefolosit } } int main() { cin >> s; n = strlen(s); for(int i = 0 ; i < n ; ++i) for(int j = i + 1 ; j < n ; j++) if(s[i] > s[j]) { char aux = s[i]; s[i] = s[j]; s[j] = aux; } back(1); return 0; }