В заявлении проблемы, которую вы хотите решить, есть некоторые неочищенные области. Я думаю, было бы лучше, если бы вы предоставили нам несколько примеров (ввод + ожидаемый результат).
В любом случае, я прочитал ваш последний комментарий и кажется, что вы хотите найти наиболее распространенный (часто используемый) элемент внутри данного массива. Вот какой способ добиться этого. В коде есть комментарии: внимательно прочитайте их.
#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;
}
Этот алгоритм работает, поскольку мы знаем минимальное и максимальное значения в массиве. Если мы этого не сделаем, мы можем сначала отсортировать массив, используя qsort, и тогда мы сможем найти экстремумы массива (экстремальные значения).
Надеюсь, это поможет.
SO не является службой отладки. Скомпилируйте с помощью символов, запустите код внутри отладчика, чтобы трассировать программы (программы) по очереди, проверяя значения соответствующих переменных, чтобы узнать, что действительно происходит.Если тогда возникает * конкретный * вопрос, не стесняйтесь возвращаться сюда. – alk
Когда 'i == j' вы считаете элемент массива равным самому себе. –