Rezolvare completă PbInfo #3154 anagrame_pfv

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 vocalele 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 vocalele 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

dorel

Ieșire

doler
dorel
loder
lored
rodel
roled

Explicație

Anagramele sunt afișate în ordine lexicografică, iar literele o și e rămân pe pozițiile inițiale.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema anagrame_pfv:

#include <iostream>
#include <cstring>
using namespace std;

int n,X[12],P[12];
char s[12],v[]="aeiou";

void afisare()
{
    for(int i=1;i<=n;i++)
       cout<<s[X[i]];
    cout<<'\n';
}

int ok(int k)
{
    if((s[X[k]]=='a' ||  s[X[k]]=='e' || s[X[k]]=='i' || s[X[k]]=='o' || s[X[k]]=='u') && X[k]!=k-1)
        return 0;
    return 1;
}

void back(int k)
{
    for(int i=0;i<n;i++)
        if(!P[i])
        {
            X[k]=i;
            P[i]=1;
            if(ok(k))
            {
                if(k==n)
                    afisare();
                else back(k+1);
            }
            P[i]=0;
        }
}

int main()
{
    cin>>s;
    n=strlen(s);
    for(int i=0;i<n;i++)
        if(strchr(v,s[i])==0)
            for(int j=i+1;j<n;j++)
                if(strchr(v,s[j])==0)
                    if(s[i]>s[j] )
                    {
                        char aux=s[i]; s[i]=s[j]; s[j]=aux;
                    }
    back(1);
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #3154 anagrame_pfv

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3154 anagrame_pfv de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!