Informatică, întrebare adresată de smizdoismizda, 8 ani în urmă

Se dă un text care conține mai multe cuvinte formate din litere mici și mari ale alfabetului englez, separate prin spații. Să se afișeze cuvintele din text, ordonate crescător în funcție de numărul de vocale. În cazul în care două cuvinte au același număr de vocale, se vor afișa în ordine lexicografică.
Date de intrare:
Cuvintele citite vor fi separate prin spații și pot apărea pe mai multe linii.

Date de ieșire:
Pe ecran se vor afișa cuvintele textului ordonate după criteriul din enunț, câte un cuvânt pe o linie.

Restricții:
Șirul va conține maxim 1 000 de caractere
Fiecare cuvânt va conține maxim 20 caractere
Textul va conține maxim 100 de cuvinte
O linie va conține maxim 1 000 de caractere

Exemplu
Date de intrare:
Ana are mere
Cosmin are portocale

Date de iesire:
Ana
Cosmin
are
are
mere
portocale

Răspunsuri la întrebare

Răspuns de Utilizator anonim
0

#include <iostream>

#include <cstring>

#include <cstdlib>

using namespace std;

int n,X[12],P[12];

char s[12];

void afisare()

{

   for(int i=1;i<=n;i++)

       cout<<s[X[i]-1];

   cout<<endl;

}

int valid(int k)

{

   if(k>1) //daca sunt cel putin la cea de-a doua litera

   {

       if(strchr("aeiou",s[X[k]-1])==0 &&

          strchr("aeiou",s[X[k-1]-1])==0)

           return 0; //doua consoane alaturare => 0

       if(strchr("aeiou",s[X[k]-1])!=0 &&

          strchr("aeiou",s[X[k-1]-1])!=0)

           return 0; //doua vocale alaturate => 0

   }

   return 1;

}

void back(int k)

{

   for(int i=1;i<=n;i++)

       if(!P[i])

       {

           P[i]=1;

           X[k]=i;

           if(valid(k))

               if(k==n) afisare();

               else back(k+1);

           P[i]=0;

       }

}

void ordonare(char s[])

{

   int l=strlen(s);

   for(int i=0;i<l;i++)

       for(int j=i+1;j<l;j++)

           if(s[i]>s[j])

           {

               char aux=s[i];

               s[i]=s[j];

               s[j]=aux;

           }

}

int main()

{

   cin>>s;

   n=strlen(s);

   int cv=0,cc=0;

   for(int i=0;i<n;i++)

       if(strchr("aeiou",s[i])==0) cc++;//numaram consoanele

       else cv++;//numaram vocalele

   if(abs(cc-cv)>1) cout<<"IMPOSIBIL";//diferenta>1 => imposibil

   else

   {

       ordonare(s);//ordonez alfabetic cuvantul

       back(1);

   }

   return 0;

}

Alte întrebări interesante