Как сравнить количество одинаковых элементов в двумерном массиве - 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.
- После завершения цикла выводится сообщение о количестве найденных повторяющихся элементов и выводится строка с наибольшим числом одинаковых элементов.
- Если повторяющиеся элементы не найдены, выводится сообщение
Нет повторов!
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д