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