Определить номер строки, в которой находится самая длинная серия одинаковых элементов - C (СИ) (72916)
Формулировка задачи:
Собственно, есть задание.
Определить номер строки, в которой находится самая длинная серия одинаковых элементов.
Я написал функцию. Однако она работает не совсем так, как надо.
Может, я что-то упустил?
int func_2(int **A, int M, int N)
{
int i,j,mas1[M], L, max;
for(i=0; i<M; i++)
{
mas1[i]=0;
}
for(i=0; i<M; i++)
{
for(j=0; j<N; j++)
{
if(A[i][j]==A[i][j+1])
mas1[i]++;
}
}
max=mas1[0]; L=0;
for(i=0; i<M; i++)
{
if(mas1[i]>max)
{
max=mas1[i];
L=i;
}
}
return(L+1);
}Решение задачи: «Определить номер строки, в которой находится самая длинная серия одинаковых элементов»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int func(int **A, int m, int n)
{
int B[m], i, j, max, temp, maxid = 0;
printf("\nMax count\n");
for(i = 0; i < m; ++i)
{
B[i] = 0;
temp = max = 1;
for(j = 0; j < n - 1; ++j)
{
if(A[i][j] == A[i][j + 1])
++temp;
else
{
if(max < temp)
max = temp;
temp = 1;
}
}
B[i] = max;
printf("%i\n", B[i]);
}
for(i = 1; i < m; ++i)
if(B[maxid] < B[i])
maxid = i;
return maxid;
}
int main()
{
const int n = 5, m = 10;
int i, j;
int **A = calloc(n, sizeof(int*));
if(!A) { fprintf(stderr, "Error: memory!"); return -1; }
for(i = 0; i < n; ++i)
{
A[i] = calloc(m, sizeof(int));
if(!A[i]) { fprintf(stderr,"Error: memory!"); return -1;}
for(j = 0; j < m; ++j)
A[i][j] = rand()%2;
}
printf("Array loaded\n");
for(i = 0; i < n; ++i)
{
for(j = 0; j < m; ++j)
{
printf("%-4i", A[i][j]);
}
printf("\n");
}
printf("\nMax row\n%i", func(A, n, m));
return 0;
}
Объяснение кода листинга программы
- Подключаются необходимые библиотеки (stdio.h, stdlib.h).
- Определяется функция func(), которая принимает двумерный массив A размером m на n, а также переменные m и n.
- Внутри функции func() создается массив B размером m, а также переменные i, j, max, temp и maxid.
- С помощью цикла for производится инициализация всех элементов массива B значением 0.
- Далее, с помощью вложенного цикла for происходит сравнение элементов массива A по строке и подсчет количества одинаковых элементов в каждой строке.
- Если количество одинаковых элементов в текущей строке больше, чем максимальное значение, то обновляется значение max, а также индекс maxid.
- После завершения циклов, в массив B записывается значение max для каждой строки.
- Затем, с помощью цикла for производится поиск строки с максимальным значением в массиве B и обновляется значение maxid.
- В конце функции func() возвращается значение maxid.
- В функции main() создается двумерный массив A размером n на m с помощью циклов for и функции calloc().
- С помощью циклов for производится заполнение массива A значениями 0 и 1 с помощью функции rand().
- Выводится сообщение о загрузке массива и его содержимое с помощью циклов for и функции printf().
- Вызывается функция func() с аргументами A, n и m.
- В конце программы выводится сообщение о найденной строке с максимальным значением и ее номере с помощью функции printf().
- Программа завершается возвратом значения 0.