В массиве найти наиболее часто встречающиеся числа - C (СИ)
Формулировка задачи:
В массиве целых чисел с количеством элементов N(N вводится с клавиатуры) найти наиболее часто встречающиеся числа. если таких чисел несколько,то определить наименьшее из них. Помогите плиз)
Решение задачи: «В массиве найти наиболее часто встречающиеся числа»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N = 0, CurrentCounter = 0, BiggestCounter = 0, FrequentEl = 0;
//CurrentCounter - текущее число повторений
//BiggestCounter - наибольшее число повторений
//FrequentEl - наиболее часто встречающийся элемент
int * Array = NULL;
printf("Input N = ");
scanf("%d", &N);
Array = (int*)malloc(N*sizeof(int));
if(Array == NULL)
{
return 1;
}
//Забиваем массив псевдослучайными числами
for(int i = 0; i < N; i++)
{
//Array[i] = rand()%N;
printf("Array[%d] = ", i);
scanf("%d", &Array[i]);
}
printf("\n");
//Смысл такой: берём элемент, сравниваем его со всеми последующими,
//если равен, то увеличиваем текущий счётчик.
//Далее сравниваем текущий счётчик с наибольшим, если он больше
//наибольшего, то делаем его наибольшим, а элемент запоминаем.
//Условие "строго больше" делает так, что выбирается наименьший
//элемент, если несколько элементов встречаются одинаковое количество раз.
for(int i = 0; i < N; i++)
{
for(int j = i; j < N; j++)
{
if(Array[i] == Array[j])
{
CurrentCounter++;
}
}
if(CurrentCounter > BiggestCounter)
{
BiggestCounter = CurrentCounter;
FrequentEl = Array[i];
}
CurrentCounter = 0;
}
printf("Frequency = %d\n", BiggestCounter);
printf("Element = %d\n", FrequentEl);
free(Array);
Array = NULL;
printf("Any key to continue, please\n");
scanf("%d", &N);
return 0;
}
Объяснение кода листинга программы
В данном коде реализована функция, которая находит наиболее часто встречающееся число в массиве. Список действий программы:
- Ввод числа N, которое определяет размер массива.
- Выделение памяти под массив с помощью malloc.
- Заполнение массива числами.
- Поиск наиболее часто встречающегося числа.
- Вывод результата на экран.
- Освобождение памяти.
- Ввод числа N для продолжения работы программы.
- Вывод сообщения об успешном завершении работы программы. Примечание: в коде есть неиспользуемый комментарий, который говорит о том, что при желании можно добавить проверку на ошибку при выделении памяти под массив.