Определить номер строки, в которой находится самая длинная серия одинаковых элементов - C (СИ) (72916)

Узнай цену своей работы

Формулировка задачи:

Собственно, есть задание. Определить номер строки, в которой находится самая длинная серия одинаковых элементов. Я написал функцию. Однако она работает не совсем так, как надо. Может, я что-то упустил?
Листинг программы
  1. int func_2(int **A, int M, int N)
  2. {
  3. int i,j,mas1[M], L, max;
  4. for(i=0; i<M; i++)
  5. {
  6. mas1[i]=0;
  7. }
  8. for(i=0; i<M; i++)
  9. {
  10. for(j=0; j<N; j++)
  11. {
  12. if(A[i][j]==A[i][j+1])
  13. mas1[i]++;
  14. }
  15. }
  16. max=mas1[0]; L=0;
  17. for(i=0; i<M; i++)
  18. {
  19. if(mas1[i]>max)
  20. {
  21. max=mas1[i];
  22. L=i;
  23. }
  24. }
  25. return(L+1);
  26. }

Решение задачи: «Определить номер строки, в которой находится самая длинная серия одинаковых элементов»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int func(int **A, int m, int n)
  5. {
  6.     int B[m], i, j, max, temp, maxid = 0;
  7.     printf("\nMax count\n");
  8.     for(i = 0; i < m; ++i)
  9.     {
  10.         B[i] = 0;
  11.         temp = max = 1;
  12.         for(j = 0; j < n - 1; ++j)
  13.         {
  14.             if(A[i][j] == A[i][j + 1])
  15.                 ++temp;
  16.             else
  17.             {
  18.                 if(max < temp)
  19.                     max = temp;
  20.                 temp = 1;
  21.             }
  22.         }
  23.         B[i] = max;
  24.         printf("%i\n", B[i]);
  25.     }
  26.     for(i = 1; i < m; ++i)
  27.         if(B[maxid] < B[i])
  28.             maxid = i;
  29.     return maxid;
  30. }
  31.  
  32. int main()
  33. {
  34.     const int n = 5, m = 10;
  35.     int i, j;
  36.     int **A = calloc(n, sizeof(int*));
  37.     if(!A) { fprintf(stderr, "Error: memory!"); return -1; }
  38.     for(i = 0; i < n; ++i)
  39.     {
  40.         A[i] = calloc(m, sizeof(int));
  41.         if(!A[i]) { fprintf(stderr,"Error: memory!"); return -1;}
  42.         for(j = 0; j < m; ++j)
  43.             A[i][j] = rand()%2;
  44.     }
  45.     printf("Array loaded\n");
  46.     for(i = 0; i < n; ++i)
  47.     {
  48.         for(j = 0; j < m; ++j)
  49.         {
  50.             printf("%-4i", A[i][j]);
  51.         }
  52.         printf("\n");
  53.     }
  54.     printf("\nMax row\n%i", func(A, n, m));
  55.     return 0;
  56. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы