Как сравнить количество одинаковых элементов в двумерном массиве - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Кто скажет, как сравнить количество одинаковых элементов в двумерном массиве и вывести строку с большим количеством таких элементов?

Решение задачи: «Как сравнить количество одинаковых элементов в двумерном массиве»

textual
Листинг программы
  1. #include <stdio.h>
  2. int main () {
  3.  const int n=3,m=4;
  4. int a[n][m] = {
  5.  {1,1,3,4},
  6.  {5,7,7,7},
  7.  {12,12,13,11}
  8.  };
  9. //или ввод матрицы a[n][m]
  10. int i,j,l,i1,i2,j1,j2,k=0,kmax=0,imax,all=0,found,found2;
  11. for (i=0; i<n*m-1; i++) {
  12.  found = 1;
  13.  i1 = i/m; j1 = i%m;
  14.  for (l=0; l<i; l++) { //если раньше был такой элемент - искать с него не надо
  15.   i2 = l/m; j2 = l%m;
  16.   if (a[i1][j1]==a[i2][j2]) { found = 0; break; }
  17.  }
  18.  if (found) {
  19.   found2 = 0;
  20.   for (j=i+1; j<n*m; j++) { //иначе ищем после элемента такие же по значению
  21.    i1 = i/m; j1 = i%m;
  22.    i2 = j/m; j2 = j%m;
  23.    if (a[i1][j1]==a[i2][j2]) {
  24.     all++; k+=(k==0?2:1); found2 = 1;
  25.    }
  26.   }
  27.   if (found2) all++;
  28.  }
  29.  if (i%m==m-1 || i==n*m-2) { //в конце строки ищем макс.количество повторов в строке kmax
  30.   if (k>kmax) { kmax = k; imax = i1; }
  31.   k = 0;
  32.  }
  33.  
  34. }
  35. if (all>0) {
  36.  printf ("\nВсего элементов с повторами значений: %d\
  37.  \nСтрока с наибольшим числом одинаковых: ",all);
  38.  for (j=0; j<m; j++) printf ("%d ",a[imax][j]);
  39. }
  40. else printf ("\nНет повторов!");
  41. getchar();
  42. return 0;
  43. }

Объяснение кода листинга программы

  1. Объявлены переменные: const int n=3,m=4; int a[n][m] = { {1,1,3,4}, {5,7,7,7}, {12,12,13,11} }; int i,j,l,i1,i2,j1,j2,k=0,kmax=0,imax,all=0,found,found2;
  2. Задана двумерная матрица a[n][m] размерностью 3x4.
  3. В цикле for (i=0; i<n*m-1; i++) выполняется поиск повторяющихся элементов в матрице a.
  4. Если элемент найден, то в цикле for (j=i+1; j<n*m; j++) проверяется наличие такого же элемента в следующей строке.
  5. Если элемент найден, то переменная all увеличивается на 1, kmax запоминает текущее значение k, и ищется следующая строка с таким же значением.
  6. Если текущая строка не содержит повторяющихся элементов, то kmax запоминает текущее значение k.
  7. Если текущая строка является последней в матрице (i%m==m-1 || i==n*m-2), то проверяется, является ли текущее значение k максимальным.
  8. Если значение kmax изменено, то все значения k сбрасываются в 0.
  9. После завершения цикла выводится сообщение о количестве найденных повторяющихся элементов и выводится строка с наибольшим числом одинаковых элементов.
  10. Если повторяющиеся элементы не найдены, выводится сообщение Нет повторов!.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы