Сколько повторяющихся чисел повторяется в массиве - PullRequest
0 голосов
/ 05 августа 2020

Я хочу подсчитать, сколько раз повторяющиеся числа повторяются в списке.

Я написал код, который находит только повторяющиеся числа в списке, но моя программа не считает, сколько раз повторяющиеся числа повторяются в массиве .

Я не хочу использовать какой-либо метод сортировки, потому что хочу понять, как его можно реализовать без какой-либо библиотеки и методов сортировки

   #include <stdio.h> 

   int main()
    {
       int list [5] = {1, 2, 1, 2, 4};
 
    int i = 0;  int j = 0;
 
    for (i=0; i<5; i++)
    {
       for ( j = i + 1; j < 5; j++)
    {
   
        if (list[i] == list[j])
        {
            printf(" Number %d is repeated in list \n", list[i]);
    }
  }
     
}


return 0;
}

1 Ответ

1 голос
/ 05 августа 2020

Идея состояла бы в том, чтобы сначала отсортировать массив (например, с помощью пузырьковой сортировки. См .: https://en.wikipedia.org/wiki/Bubble_sort). После этого довольно легко определить количество повторяющихся чисел в вашем списке, просто подсчитав количество встречаемости каждого числа.

Сортировка обеспечит преобразование вашего списка из

int list [5] = {1, 2, 1, 2, 4};

в

int list [5] = {1, 1, 2, 2, 4};

И код для подсчета каждого вхождения мог бы выглядеть примерно так:

int idx, currentNumber, currentCounter, numberOfElements;

currentNumber = list[0];
currentCounter = 0;
numberOfElements = sizeof(list) / sizeof(list[0]);
for (idx = 0; idx < numberOfElements; idx++) {
   if (list[idx] != currentNumber) {
      printf("List contains number %d %d time(s)\n", currentNumber, currentCounter);

      currentNumber = list[idx];
      currentCounter = 1;
   } else {
      currentCounter++;
   }
}

printf("List contains number %d %d time(s)\n", currentNumber, currentCounter);

если вас интересуют только дубликаты, просто проверьте, больше ли currentCounter единицы. После этого подсчет общего количества дубликатов становится тривиальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...