infoarena

infoarena - concursuri, probleme, evaluator, articole => Teme => Subiect creat de: A Cosmina - vechi din Iunie 07, 2009, 20:23:55



Titlul: problema siruri de caractere
Scris de: A Cosmina - vechi din Iunie 07, 2009, 20:23:55
Am o problema care imi da batai de cap.
Spune asa:



Un elev din clasa 1 are la dispozitie n litere mici ale alfabetului latin,din care m distincte.Doamna invatatoare ii cere urmatoarele lucruri:

a)Sa verifice daca exista litere care apar de mai multe ori si sa pastreze toate literele distincte o singura data.
b)Sa aseze aceste litere in ordine alfabetica.

Ex:

n=6
a,b,a,d,c,c

a) a,b,d,c
b)a,b,c,d

Am incercat mai multe metode:

s: a,b,a,d,c,c
s1=ceea ce trebuie sa apara
Cod:
i=0,strlen(s)
j=0,stlen(s)
if (s[i]<s[j])
   {
    aux=s[i];
    s[i]=s[j];
    s[j]=s[i];
    } //am ordonat s->>apare a,a,b,c,c,d

//mai departe vreau sa pun in s2 fiecare litera o singura data
i=0
executa
    {
     daca (s[i]==s[i+1])
        {
         s2[i]=s[i];
          i+=2;
         }
       altfel
            {
             s2[i]=s[i];
             ++i;
              }
     atata timp cat (i<strlen(s2); //strlen(s2) am dat de la inceput 4
//afisez s2


Ar trebui sa-mi apara a,b,c,d. Apare numai a. Am inlocuit acel "executa...atat timp cat" (do..while din C) cu while.La fel.
Ce am gresit? Imi puteti spune unde esueaza codul meu? Sau da-ti-mi alta solutie... ???


Titlul: Răspuns: problema siruri de caractere
Scris de: gaboru corupt din Iunie 07, 2009, 20:46:17
Sincer, nu m-am pus sa inteleg ce faci acolo, dar iti pot da alta idee. Citesti caracter cu caracter, si iti ti un vector sol in care retii sol[ i ] = 1 daca ai intalnit litera i (adik c-'a'+1, unde c e caracterul citit) si sol[ i ] = 0 daca nu ai intalnit-o. Si la final parcuri vectorul sol[  ] si daca sol[ i ] == 1 afisezi char(i+'a'-1). Trebuie sa ai sol[27], adica cate caractere pot aparea.  :)


Titlul: Răspuns: problema siruri de caractere
Scris de: A Cosmina - vechi din Iunie 07, 2009, 21:00:01
M-ai cam bagat in ceata cu c-'a'+1 si cu i+'a'-1...
Poti,te rog, sa implemetezi in pseudocod ideea? :aha:


Titlul: Răspuns: problema siruri de caractere
Scris de: Andrei Misarca din Iunie 07, 2009, 21:10:29
Cod:
int viz[26] //verific daca acel caracter a mai aparut pana acu
//a)
for(int i = 0; i < strlen(S); ++i)
    if(viz[S[i] - 'A'] == 0)
    {
        viz[S[i] - 'A'] = 1
        printf("%c",S[i]);
    }
//b)
for(int i = 0; i < 26; ++i)
    if(viz[i])
        printf("%c",i+'A');
Ceva de genu asta ar arata, daca am inteles io bine enuntu


Titlul: Răspuns: problema siruri de caractere
Scris de: A Cosmina - vechi din Iunie 07, 2009, 21:18:16
Multumesc pentru interventie,Mishu! :D Treaba e ca merge,afiseaza a,b,c,d dar apoi afiseaza si alfabetul cu majuscule ABCD...etc.



Nu ma prind,de ce? :-s


Titlul: Răspuns: problema siruri de caractere
Scris de: Andrei Misarca din Iunie 07, 2009, 21:37:58
Daca vrei sa lucrezi cu litere mici, schimba i - 'A' in i - 'a' si i + 'A' in i + 'a', pentru ca cele doua caractere au coduri ASCII diferite.


Titlul: Răspuns: problema siruri de caractere
Scris de: A Cosmina - vechi din Iunie 07, 2009, 22:01:39
Mersi :)