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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
int main () {
 const int n=3,m=4;
int a[n][m] = {
 {1,1,3,4},
 {5,7,7,7},
 {12,12,13,11}
 };
//или ввод матрицы a[n][m]
int i,j,l,i1,i2,j1,j2,k=0,kmax=0,imax,all=0,found,found2;
for (i=0; i<n*m-1; i++) {
 found = 1;
 i1 = i/m; j1 = i%m;
 for (l=0; l<i; l++) { //если раньше был такой элемент - искать с него не надо
  i2 = l/m; j2 = l%m;
  if (a[i1][j1]==a[i2][j2]) { found = 0; break; }
 }
 if (found) {
  found2 = 0;
  for (j=i+1; j<n*m; j++) { //иначе ищем после элемента такие же по значению
   i1 = i/m; j1 = i%m;
   i2 = j/m; j2 = j%m;
   if (a[i1][j1]==a[i2][j2]) {
    all++; k+=(k==0?2:1); found2 = 1;
   }
  }
  if (found2) all++;
 }
 if (i%m==m-1 || i==n*m-2) { //в конце строки ищем макс.количество повторов в строке kmax
  if (k>kmax) { kmax = k; imax = i1; }
  k = 0;
 }
 
}
if (all>0) {
 printf ("\nВсего элементов с повторами значений: %d\
  \nСтрока с наибольшим числом одинаковых: ",all);
 for (j=0; j<m; j++) printf ("%d ",a[imax][j]);
}
else printf ("\nНет повторов!");
getchar();
return 0;
}

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

  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
Похожие ответы