Определить номер строки, в которой находится самая длинная серия одинаковых элементов - 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;
}

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

  1. Подключаются необходимые библиотеки (stdio.h, stdlib.h).
  2. Определяется функция func(), которая принимает двумерный массив A размером m на n, а также переменные m и n.
  3. Внутри функции func() создается массив B размером m, а также переменные i, j, max, temp и maxid.
  4. С помощью цикла for производится инициализация всех элементов массива B значением 0.
  5. Далее, с помощью вложенного цикла for происходит сравнение элементов массива A по строке и подсчет количества одинаковых элементов в каждой строке.
  6. Если количество одинаковых элементов в текущей строке больше, чем максимальное значение, то обновляется значение max, а также индекс maxid.
  7. После завершения циклов, в массив B записывается значение max для каждой строки.
  8. Затем, с помощью цикла for производится поиск строки с максимальным значением в массиве B и обновляется значение maxid.
  9. В конце функции func() возвращается значение maxid.
  10. В функции main() создается двумерный массив A размером n на m с помощью циклов for и функции calloc().
  11. С помощью циклов for производится заполнение массива A значениями 0 и 1 с помощью функции rand().
  12. Выводится сообщение о загрузке массива и его содержимое с помощью циклов for и функции printf().
  13. Вызывается функция func() с аргументами A, n и m.
  14. В конце программы выводится сообщение о найденной строке с максимальным значением и ее номере с помощью функции printf().
  15. Программа завершается возвратом значения 0.

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы