Поиск в массиве одинаковых элементов - C (СИ)
Формулировка задачи:
Необходимо найти в массиве одинаковые элементы и вывести значение одного из элементов. Если в массиве есть несколько групп одинаковых элементов, то необходимо вывести значение элемента, который повторяется чаще. Спасибо!
Решение задачи: «Поиск в массиве одинаковых элементов»
textual
Листинг программы
#include <stdio.h>
/*самый простой вариант, без сортировки и различных структур-данных
хэш-таблиц, rb-tree... */
int max_rep(const int* f, const int* l){
int n, m, i;
const int* p, *t = f;
for(i = -1, m = 1; f != l; ++f){
n = 1;
for(p = f + 1; p != l; ++p){
if(*p == *f)
++n;
}
if(n > m){
m = n;
i = (int)(f - t);
}
}
return i;
}
int main(void) {
int a[] = { 1, 3, 4, 2, 0, 2, 5, 6, 1, 7, 3 };
size_t n = sizeof(a)/sizeof(a[0]);
int i = max_rep(a, a + n);
if(i != -1)
printf("value: %d\n", a[i]);
else
puts("unique array.");
return 0;
}
Объяснение кода листинга программы
- Включаем заголовочный файл stdio.h для использования функций ввода-вывода
- Представлен самый простой вариант реализации функции поиска максимального количества повторяющихся элементов в массиве
- Функция max_rep принимает два указателя на начало и конец массива, которые итерируются по элементам массива
- Два вложенных цикла: внешний для прохода по всем элементам массива и внутренний для подсчета количества повторяющихся элементов
- Если внутренний цикл встречает элемент, равный текущему, то увеличивается счетчик повторяющихся элементов
- Если количество повторяющихся элементов больше, чем максимальное значение, то обновляется максимальное значение и индекс последнего найденного элемента
- Возвращаем индекс последнего найденного элемента
- В функции main создаем массив a и инициализируем его значениями
- Вызываем функцию max_rep, передавая указатель на начало и конец массива
- Если найдено повторяющееся значение, то выводим его на экран, иначе выводим сообщение, что массив уникален
- Возвращаем 0, чтобы указать, что программа успешно завершилась