Il y a des zones non-clarifiées dans l'énoncé du problème que vous voulez résoudre. Je pense qu'il aurait mieux valu que vous nous fournissiez plusieurs exemples (input + output attendu).
Quoi qu'il en soit, j'ai lu votre dernier commentaire et il semble que vous vouliez trouver l'élément (fréquent) le plus commun dans un tableau donné. Voici un moyen d'y parvenir. Il y a des commentaires dans le code: lisez-les attentivement.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
// gcc main.c -o main -std=c99
// ./main
int main(int argc, const char * argv[])
{
srand((unsigned int)time(NULL));
int array[MAX];
for(int i=0; i<MAX; i++) {
array[i] = -1; // to make sure there are no uninitialized fields
}
int npeople = -1;
do {
printf("How many people (1 to %d)? ", MAX);
scanf("%d", &npeople);
}
while(npeople<1 || npeople>MAX);
// Filling array with integer values in range [min, max]
const unsigned int min=5;
const unsigned int max=15;
for(int i=0; i<npeople; i++) {
array[i] = min + rand() % (max-min+1);
}
// Now searching for the most frequent element
const int f = max+1;
int freq[f];
/* frequency array
* freq[i] = k means value i appears k times in array
* And to make things easier, we use up to max+1 fields for the frequency array.
* But normally, only max-min+1 fields are needed.
* However in that case, additional conversions (between array and freq)
* become mandatory.
*/
// initialization
for(int i=0; i<f; i++) {
freq[i] = 0;
}
// filling frequency array
for(int i=0; i<MAX; i++) {
freq[array[i]]++;
}
// Display
printf("\n");
printf("Input array\n");
printf("===========\n");
for(int i=0; i<MAX; i++) {
printf("%d", array[i]);
i==MAX-1 ? printf("\n") : printf(" ");
}
printf("\n");
printf("Frequency array\n");
printf("===============\n");
for(int i=0; i<f; i++) {
printf("%0d", freq[i]);
i==f-1 ? printf("\n") : printf(" ");
}
printf("\n");
printf("Note\n");
printf("====\n");
printf("freq[i] = k MEANS value i appears k times in array\n");
int mse = -1; // most frequent element
int h = -1; // highest occurrence
for(int i=0; i<f; i++) {
if(freq[i] > h) {
h = freq[i];
mse = i;
}
}
printf("\n");
printf("Conclusion\n");
printf("==========\n");
printf("The most frequent element is %d, appearing %d time(s).\n", mse, h);
return 0;
}
Cet algorithme fonctionne puisque nous connaissons les valeurs minimum et maximum dans le tableau. Si nous ne le faisons pas, nous pouvons d'abord trier le tableau en utilisant qsort et ensuite nous pourrons trouver l'extrema du tableau (valeurs extrêmes).
Espérons que ça aide.
est SO pas un service de débogage. Compilez avec des symboles, exécutez le code dans un débogueur pour suivre le ou les programmes ligne par ligne en inspectant les valeurs des variables pertinentes pour savoir ce qui se passe réellement.Si une question * spécifique * se pose, n'hésitez pas à revenir ici. – alk
Quand 'i == j' vous comptez l'élément de tableau comme étant égal à lui-même. –