Compter le nombre d'éléments différents

Résolu/Fermé
Sara426 Messages postés 671 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 - 17 nov. 2011 à 16:59
 Utilisateur anonyme - 19 nov. 2011 à 17:38
Bonjour,

Je programme en C.

J'aimerais faire un programme qui prend en entrée un tableau d'entier et qui renvoie combien de lettres différentes il y a dedans.

Par exemple : 5 9 4 4 doit me rendre 3.


Voilà ce que j'ai voulu essayer :

Une fonction existe qui renvoie 1 si le nombre c est déjà dans la liste
int existe (int c, int liste[])
{
int i=0;
int r=0;
while ((i<8)&&(r==0))
{
if (c==liste[i])
r=1;
else i=i+1;
}
return r;
}

Une fonction verif_nb_couleur qui prend mon tableau d'entier t[], le nombre de couleur maximal c, et le nombre de pion (ou la longueur du tableau) p
int verif_nb_couleur (int t[], int c, int p)
{
int r=0;
int i=0;
int liste[8];
int i2=0;
while (i<p)
{
if (existe(t[i], liste)==1)
i=i+1;
else {liste[i2]=t[i];
i2=i2+1;
i=i+1;
}
}
if (i2>(c-1))
r=-1;
else r=0;
return r;
}

Verif_nb_couleur renvoie 0 si on ne dépasse pas c (soit le nombre maximal de couleur) ou -1 si on a dépassé ce nombre.

Merci

Cordialement,
Sara.

2 réponses

bonjour,

tu pourrais utiliser une fonction de tri, qui te donnerait directement le nombre de valeurs differentes :

( je n'ai pas teste la fonction c'est juste une idée )


int t[....]={5,9,4,4....

faire une copie du tableau si tu souhaites le conserver intact

int verif_nb_couleur(int t[], int c, int p)
{

int i, j
int Min3;
int nbcol=0;

int MinPrec=-1;

for ( i =0; i<p;i++)
{
Min3 = t[i];

for ( j =i+1; j<p;j++)
{

if ( t[j] <Min3 )
{
Min3 =t[j];
t[j]=t[i];
t[i]=Min3;

}

}
if ( Min3 >MinPrec )
nbcol++;

MinPrec=Min3;



}
if ( nbcol <= c)
return 0;


return -1;

}
1
autre solution + simple toujours avec une seule fonction

se servir de ton tableau comme indice d'un autre tableau ( tab )
tu initialises à 0 ton nouveau tableau de taille egale au nombre maximal de couleurs

tu places 1 dans le nouveau tableau à l'indice qui corrrespond à chaque valeur de ton tableau de couleurs

à la fin tu comptes le nombre de 1, ça te donne le nombre de valeurs differentes de ta liste (:-)



int verif_nb_couleur(int t[], int c, int p)
{

int i;
int nbcol=0;
int tab[50];

for ( i =0; i<50;i++)
tab[i]=0;


for ( i =0; i<p;i++)
tab[t[i]]=1;

for ( i =0; i<50;i++)
nbcol = nbcol + tab[i];



if ( nbcol <= c)
return 0;


return -1;

}





c'est parce que la vitesse de la lumière est supérieure à celle du son que certains ont l'air brillant avant d'avoir l'air k.on !
0