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