fbpx

Problema #3155 – anagrame4 – Rezolvari PBInfo

de Mihai-Alexandru

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 mult 11 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);
}
Comentarii

S-ar putea sa iti placa