fbpx

Problema #194 – Anagrame1 – Rezolvari PBInfo

de Mihai-Alexandru

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

S-ar putea sa iti placa