PDA

Visualizza la versione completa : [C] calcolo cifre ripetute


cles
29-04-2010, 13:27
Ho difficoltà a capire come questo codice possa scrivere quante volte è ripetuta una cifra nel numero immesso:


int main()
{
int digit_count[10] = {0};
int digit;
long n;

printf("Enter a number: ");
scanf("%ld", &n);

while (n > 0) {
digit = n % 10;
n /= 10;
digit_count[digit]++;
}

printf ("Digit: ");
for (digit = 0; digit <= 9; digit++)
printf("%3d", digit);
printf("\nOccurrences:");
for (digit = 0; digit <= 9; digit++)
printf("%3d", digit_count[digit]);
printf("\n");

return 0;
}

la parte finale proprio non la capisco.se immetto 266,quando stampo il valore,digit[0] dovrebbe valere 6,digit[1] 6 e digit[2] 2.invece no.qualcuno sà spiegarmi esattamente il passaggio finale?grazie

LeleFT
29-04-2010, 14:32
No: se tu scrivi 266 allora l'array digit_count avrà, alla fine, i seguenti valori:


digit_count[0] = 0
digit_count[1] = 0
digit_count[2] = 1
digit_count[3] = 0
digit_count[4] = 0
digit_count[5] = 0
digit_count[6] = 2
digit_count[7] = 0
digit_count[8] = 0
digit_count[9] = 0


Questo perchè il programma, furbamente, crea un array di 10 elementi (tanti quante sono le cifre possibili!) e per effettuare il conteggio dei duplicati, semplicemente incrementa il valore nella posizione espressa dal valore della cifra. Quindi, ogni volta che incontra la cifra '6', incrementa la posizione 6 dell'array.


Ciao. :ciauz:

cles
29-04-2010, 14:41
ok,ma quando l'incrementa?nel ciclo while?e se si,non mi è proprio chiaro il meccanismo!nel ciclo while dovrebbe incrementare semplicemente da 0 a 9 o sbaglio?

cles
29-04-2010, 15:06
forse ci sono,grazie alla tua spiegazione e a mezz'ora fissando il codice :confused: forse ci sono arrivato.correggimi cortesemente se sbaglio:

se inserisco il numero 266 all'interno del while il primo digit prende valore 6 e quando incontra digit_count[digit]++ diventa digit_count[digit6]+1 e così via...

....complicato..... :mem:

Loading