Как сравнить количество одинаковых элементов в двумерном массиве - 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;
}
Объяснение кода листинга программы
- Объявлены переменные: 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;
- Задана двумерная матрица a[n][m] размерностью 3x4.
- В цикле for (i=0; i<n*m-1; i++) выполняется поиск повторяющихся элементов в матрице a.
- Если элемент найден, то в цикле for (j=i+1; j<n*m; j++) проверяется наличие такого же элемента в следующей строке.
- Если элемент найден, то переменная all увеличивается на 1, kmax запоминает текущее значение k, и ищется следующая строка с таким же значением.
- Если текущая строка не содержит повторяющихся элементов, то kmax запоминает текущее значение k.
- Если текущая строка является последней в матрице (i%m==m-1 || i==n*m-2), то проверяется, является ли текущее значение k максимальным.
- Если значение kmax изменено, то все значения k сбрасываются в 0.
- После завершения цикла выводится сообщение о количестве найденных повторяющихся элементов и выводится строка с наибольшим числом одинаковых элементов.
- Если повторяющиеся элементы не найдены, выводится сообщение
Нет повторов!.