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