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

Ar putea cineva sa imi explice algoritmul de vector de frecventa pas cu pas? Pentru C++

Răspunsuri la întrebare

Răspuns de MathsAndCS
2

Răspuns:

int n, v[10] = {0};

cin >> n;

while (n != 0)

{

     int c = n % 10;

     v[c]++;

     n = n / 10;

}

Explicație:

n - numar intreg, v - vector de numere intregi, c - variabila in care se stocheaza ultima cifra din n

Se cere sa se afle frecventa fiecarei cifre din n. De exemplu:

n = 6723120, 0 - 1 data, 1 - o data, 2 - de doua ori, 3 - o data, etc.

Vectorul v este initializat cu 0 la inceput, astfel fiecare valoare (v[1], v[2],...,v[9]) va fi egala cu 0. Il initializam cu 0 pentru ca, la inceput, frecventa fiecarei cifre este 0, urmand sa o gasim noi. v[i] reprezinta frecventa cifrei i.

Luam concret exemplul de mai sus si facem pe pasi:

n = 6723120

c = 0 (ultima cifra din n)

v[c] ++ (adica v[0] va deveni 1)

n = 672312 (se taie ultima cifra)

c = 2 (ultima cifra din n)

v[c] ++ (adica v[2] va deveni 1)

n = 67231 (se taie ultima cifra)

c = 1

v[c] ++ (v[1] devine 1)

n = 6723

c = 3

v[c] ++ (v[3] devine 1)

n = 672

c = 2

v[c] ++ (v[2] devine 2)

n = 67

c = 7, v[c]++ (v[7] devine 1)

n = 6

c = 6, v[c]++ (v[6] devine 1)

n = 0

STOP ALGORITM

La sfarsit, vectorul v va arata astfel, incepand cu pozitia 0:

1, 1, 2, 1, 0, 0, 1, 1

Inseamna ca avem 1 cifra de 0, 1 cifra de 1, 2 cifre de 2, 1 cifra de 3, etc.

Practic ce face algoritmul e sa ia fiecare cifra din n, apoi incrementeaza v[cifra].


Endomellz: Multumesc mult pentru explicatie!
Alte întrebări interesante