Documente Academic
Documente Profesional
Documente Cultură
//Important! In memorie ele sunt reținute de la 0. Deci avem fr[0].. fr[9]. Total 10 elemente.
fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9]
0 0 0 0 0 0 0 0 0 0
Pentru a accesa un element trebuie sa precizam numele vectorului si pozitia la care ne uitam.
int main(){
int fr[10];
for (int i = 0; i<=9; i++) /// sau for(int i=0;i<10;i++)
fr[i]=0;
}
Exemplu: 277432
Se afiseaza: 7 4 3 2
While(n!=0)
{
fr[n%10]=fr[n%10]+1;
n=n/10;
}
fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9]
0 0 0 0 0 0 0 0 0 0
Pas 1:
fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9]
0 0 1 0 0 0 0 0 0 0
Mai departe,
Pas 2:
fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9]
0 0 1 1 0 0 0 0 0 0
Mai departe,
Pas 3:
fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9]
0 0 1 1 1 0 0 0 0 0
Mai departe,
Pas 4:
fr[n%10] = fr[n%10]+1; (277 % 10 = 7)
fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9]
0 0 1 1 1 0 0 1 0 0
Mai departe,
Pas 5:
fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9]
0 0 1 1 1 0 0 2 0 0
Mai departe,
Pas 5:
fr[n%10] = fr[n%10]+1; (2 % 10 = 2)
fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9]
0 0 2 1 1 0 0 2 0 0
Mai departe,
Practic, rolul vectorului de frecventa este sa retina pentru fiecare cifra de cate ori apare ea in numar.
In cazul vectorilor de frecventa, pozitia vectorului face referire la numarul pentru care numaram.
Ca sa afisam acum cifrele in ordine descrescatoare ale numarului intial n, parcurgem de la final
vectorul si acolo unde continutul este diferit de 0, afisam pozitia.
for( i = 9; i>=0; i -- )
{
if (fr[i] != 0)
cout<<i<<” ”;
}
int main(){
int fr[10];
for (int i = 0; i<=9; i++)
{
fr[i]=0;
}
int n;
cout<<”n = ”;
cin>>n;
while ( n != 0 )
{
fr[n%10] = fr[n%10] + 1;
n = n/10;
}
for(i=9;i>=0;i--)
{
if(fr[i] != 0)
cout<<i<<” ”;
}
return 0;
}
Problema 2:
Exemplu: 277432
Se afisa: 7 7 4 3 2 2
int main(){
int fr[10];
for (int i = 0; i<=9; i++)
{
fr[i]=0;
}
int n;
cout<<”n = ”;
cin>>n;
while ( n != 0 )
{
fr[n%10] = fr[n%10] + 1;
n = n/10;
}
for(i=9;i>=0;i--)
{
while( fr[i] != 0 )
{
cout<<i<<” ”;
fr[i] = fr[i] – 1;
}
}
return 0;
}
fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9]
0 0 2 1 1 0 0 2 0 0
Pas 1:
Pas 2:
Pas 3:
fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9]
0 0 2 1 1 0 0 1 0 0
Este fr[7] != 0? (OK)
Scrie 7
fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9]
0 0 2 1 1 0 0 0 0 0
Problema 3:
Se citeste un numar n. Folosind vector de frecventa sa se afiseze mesajul „DA” daca numarul are cifre
distincte si mesajul „NU” in caz contrar.
int main()
{
int n, i, fr[10], uc;
ok = 1; /// variabila care retine starea numarului.
/// e variabila care e 0 daca cifrele NU sunt distincte si e 1 daca cifrele SUNT distincte
for (i = 0 ; i <= 9; i++)
{
fr[i] = 0; ///fac initial vectorul de frecventa sa fie 0 peste tot
}
cin>>n;
while ( n != 0) ///cat timp am cifre in numar
{
uc = n%10; ///aflu ultima cifra
fr[uc] = fr[uc] + 1; ///cresc frecventa cifrei
n = n/10; ///tai ultima cifra numarului
}
for ( i = 0; i <= 9; i++ )
{
if (fr[i] > 1) ///daca o cifra apare mai mult de o singura data inseamna ca se repete
{
ok=0; ///e variabila care e 0 daca cifrele NU sunt distincte si e 1 daca cifrele SUNT distincte
}
}
if (ok == 0)
{
cout<<”NU”;
}
else
{
cout<<”DA”;
}
return 0;
}
Problema 4:
Se citeste un numar n. Sa se afiseze utilizand vectorul de frecventa cele mai mari 2 cifre ce nu apar in
numar.
int main ()
{
int n, i, fr[10], uc;
int contor = 0; //contor ce numara cate cifre am afisat. Daca am afisat 2 cifre ne oprim.
cin >> n;
for ( i = 0; i <= 9; i++)
{
fr[i]=0;
}
while (n != 0)
{
uc = n%10;
n = n/10;
fr[uc] = fr[uc] + 1;
}
for ( i = 9; i >= 0 && contor<2; i--)
{
if ( fr[i] == 0 )
{
cout << i;
contor = contor + 1; //cresc contorul dupa ce afisez.
}
}
return 0;
}