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

#2693 pbinfo

Am reușit să ajung la o soluție , care am incercat-o pe mai multe exemple și mi-au mers , dar când îl pun pe pbinfo îmi dă doar 20 de puncte , aveți idee ce mi-a scăpat ?

Cerința
Se dă un șir de caractere în care cuvintele sunt formate din litere mici și mari ale alfabetului englez și sunt separate prin spații. Să se afișeze cuvintele în ordine descrescătoare după numărul de vocale și să se afișeze fiecare cuvânt pe câte o linie. Dacă două cuvinte au același număr de vocale atunci ele se vor ordona descrescător după lungime, iar dacă au aceeași lungime atunci se vor ordona lexicografic.

Date de intrare
Programul citește de la tastatură un șir de caractere.

Date de ieșire
Programul va afișa pe ecran cuvintele din text, în ordinea cerută, câte unul pe linie.

Restricții și precizări
șirul va conține maximum 255 de caractere.

Exemplu
Intrare

ana are mere
Ieșire

mere
ana
are



#include<iostream>
#include<ctype.h>
#include<string.h>

using namespace std;

int main()
{char s[256],*p,v[20]="AEIOUaeiou",f[250][250];
int i=0,j,n,c,d,a,co,b;
cin.getline(s,256);
p=strtok(s," ");
while(p)
{strcpy(f[++i],p);
p=strtok(NULL," ");
}
n=i;


for(i=1;i<n;i++)
{a=strlen(f[i]);
for(j=i+1;j<=n;j++)
{ b=strlen(f[j]);
if(a<b)
swap(f[i],f[j]);
}
}


for(i=1;i<n;i++)
{a=strlen(f[i]);
for(j=i+1;j<=n;j++)
{ b=strlen(f[j]);
if((a==b)&&(strcmp(f[i],f[j])>0))
swap(f[i],f[j]);
}
}


for(i=1;i<n;i++)
{a=strlen(f[i]);
p=f[i];
c=0;
for(j=0;j<a;j++)
if(strchr(v,p[j]))
c++;
for(j=i+1;j<=n;j++)
{ b=strlen(f[j]);
p=f[j];
co=0;
for(d=0;d<b;d++)
if(strchr(v,p[d]))
co++;
if(c<co)
{swap(f[i],f[j]);
c=co;
}
}
}


for(i=1;i<=n;i++)
cout<<f[i]<<endl;
return 0;
}


Răspunsuri la întrebare

Răspuns de lucaciucandrei
1

e de 100 pct

coroana!

#include <iostream>

#include <cstring>

using namespace std;

int voc(char s[]){

   int i= 0,k=0;

   while(s[i]){

       if(strchr("aeiouAEIOU",s[i])!=NULL) k++;

       i++;

   }

   return k;

}

int main(){

   char s[256],m[260][260];

   cin.getline(s , 256);

   int i=0,k=1,j=0,v[101];

   while(s[i]!='\0'){

       if(s[i]!=' ') m[k][j]=s[i],j++;

       if(s[i]==' '&&s[i+1]!=' ') k++,j=0;

       i++;

   }

   for(int i=1;i<=k;++i) v[i]=voc(m[i]);

   for(int i=1;i<=k;++i) for(int j=i+1;j<=k;++j) if(v[j]>v[i]) swap(m[j],m[i]),swap(v[j],v[i]);

   for(int i=1;i<=k;++i) for(int j=i+1;j<=k;++j) if(strlen(m[j])>strlen(m[i])&&v[j]==v[i]) swap(m[j],m[i]);

   for(int i=1;i<=k;++i) for(int j=i+1;j<=k;++j) if(v[i]==v[j]&&strlen(m[i])==strlen(m[j])&&strcmp(m[i],m[j])==1) swap(m[j],m[i]);

   for(int i=1;i<=k;++i) cout<<m[i]<<endl;

   return 0;

}

Alte întrebări interesante