401
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;
}
Comentarii