fbpx

Problema #3149 – anagrame_vocale – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se citește un cuvânt format din cel puțin două și cel mult zece caractere litere mici distincte care conține cel puțin două vocale. Afișați în ordine lexicografică anagramele cuvântului citit care au proprietatea că încep și se termină cu o vocală.

Date de intrare

Programul citește de la tastatură șirul de caractere.

Date de ieșire

Programul va afișa pe ecran anagramele cerute, câte una pe un rând.

Restricții și precizări

  • numărul de caractere ale șirului dat este cuprins între 2 și 10;
  • cuvântul dat este format din litere mici distincte și conține cel puțin două vocale;
  • vocalele sunt a, e, i, o, u;

Exemplu

Intrare

alin

Ieșire

alni
anli
ilna
inla
#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++)
        cout << s[x[i] - 1];
    cout << '\n';
}

void back(int k)
{
    for(int i = 1 ; i <= n ; i++)
        if(!p[i])
        {
            x[k] = i;
            p[i] = 1;
            if(voc(s[x[1] - 1]))
                if(k == n)
                 {
                    if(voc(s[x[k] - 1]))afisare();
                    }
            else back(k + 1);
            p[i] = 0;
        }
}

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]) swap(s[i] , s[j]);

    back(1);

}
Comentarii

S-ar putea sa iti placa