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

Buna!
Imi explica cineva, va rog, ce se intampla in while-ul acela?

#include
using namespace std;

long int v[10];

int main()
{
long int x,n,i;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>x;
while(x>=10)
x/=10;
v[x]++;
}

Răspunsuri la întrebare

Răspuns de ProMinecraft69
1

v[10] este folosit ca vector de Aparitie/Frecventa.

Vectorii de aparitii pastreaza de cate ori a aparut valoarea "x" in sirul dat.

De exemplu daca ai numerele  1 2 3 3 1

v[1] = 2, v[2] =1 si v[3]  = 2 pentru ca 1 apare de 2 ori, 2 o data si 3 de 2 ori.

In while-ul tau, se numara aparitiile cifrelor pana cand numarul e mai mare decat 10.

Practic tu ai n numere si le descompui pe fiecare marind aparitia lor in vectorul de frecventa.

De exemplu daca ai n =2

x1 = 300, x2 = 401

pe 3 nu o sa il ia in considerare deoarece te opresti la >= 10

Ii numara aparitia lui 0 , nr devine 30, apoi iar la0 numarul devine 3 si se opreste fara sa mai mareasca si val pentru 3.

La 401 la fel, mareste aparitia lui 1, devine 40,mareste aparitia lui 0 si se opreste.

In final vei avea v[0] = 3, v[1] = 1, v[2] = 0,v[3] = 1, v[4] =1.

Sper ca ai inteles.


ProMinecraft69: Daca nu ai inteleg prea bine, pot sa revin cu un exemplu in c++ in care pot pune comentarii.
sikesjack1: In mare am intels, am o singura nelamurire, ai spus ca pe 3 si 4, din 300 si 401, nu ii mai ia in considerare, dar totusi ele apar cu frecventa 1, v[3]=1, v[4]=1, cum asa???
ProMinecraft69: M-am gandit la altceva :))) dar oricum acum vad si eu ca nu am inteles bine algoritmul. Acel while , pana la urma il micsoreaza pe x pana e mai mare sau egal cu 10, dupa ii creste aparenta. Nu stiu de ce am vazut cifra :)).
ProMinecraft69: de exemplu daca ai x = 300, il face 30, dupa il face 3 si ii creste aparenta. sau x = 401 , il face 40, apoi 4 si ii creste aparenta
sikesjack1: am inteles acum, mersi de info, super explicatii!
Alte întrebări interesante