вывод номера последней строки с максимальным количеством одинаковых элементов

#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <locale.h>
#include <stdio.h>
#include <time.h>

// Функция для вывода матрицы на экран
void printMatrix(int** matrix, int rows, int cols) {
    printf("Матрица:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
}

// Функция для заполнения матрицы рандомными числами
void fillRandomMatrix(int** matrix, int rows, int cols) {
    srand(time(NULL));
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            matrix[i][j] = rand() % 10; // Генерация случайных чисел от 0 до 99
        }
    }
}

int main() {
    setlocale(LC_ALL, "Rus");
    int** matrix;
    int m, n;

    // Ввод размеров матрицы
    printf("Введите количество строк и столбцов матрицы: ");
    scanf("%d %d", &m, &n);

    // Выделение памяти для указателей на строки
    matrix = (int**)malloc(m * sizeof(int*));
    if (matrix == NULL) {
        printf("Ошибка выделения памяти\n");
        return 1;
    }

    // Выделение памяти для каждой строки
    for (int i = 0; i < m; i++) {
        matrix[i] = (int*)malloc(n * sizeof(int));
        if (matrix[i] == NULL) {
            printf("Ошибка выделения памяти\n");
            // Освобождение ранее выделенной памяти
            for (int j = 0; j < i; j++) {
                free(matrix[j]);
            }
            free(matrix);
            return 1;
        }
    }

    int choice;
    printf("Выберите способ заполнения матрицы:\n");
    printf("1. Ввести элементы самостоятельно\n");
    printf("2. Заполнить случайными числами\n");
    printf("Ваш выбор: ");
    scanf("%d", &choice);

    if (choice == 1) {
        // Ввод элементов матрицы
        printf("Введите элементы матрицы:\n");
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                scanf("%d", &matrix[i][j]);
            }
        }
    }
    else if (choice == 2) {
        fillRandomMatrix(matrix, m, n);
    }
    else {
        printf("Некорректный выбор.\n");
        // Освобождение памяти
        for (int i = 0; i < m; i++) {
            free(matrix[i]);
        }
        free(matrix);
        return 1;
    }

    int maxCount = 0; // счетчик макс количества одинаковых элементов
    int maxRow = -1; // счетчик количества строк

    // Подсчет количества одинаковых элементов в каждой строке
    for (int i = 0; i < m; i++) {
        int count = 0;
        for (int j = 0; j < n - 1; j++) {
            if (matrix[i][j] == matrix[i][j + 1]) {
                count++;
            }
            else {
                count = 0;
            }
        }
        // Обновление номера строки с максимальным количеством одинаковых элементов
        if (count >= maxCount) {
            
            maxRow = i;
            maxCount = count;
            
        }
    }

    // Вывод результата
    printMatrix(matrix, m, n);

    if (maxRow == -1) {
        printf("Нет строк с одинаковыми элементами.\n");
    }
    else {
        printf("Номер последней строки с максимальным количеством одинаковых элементов: %d\n", maxRow + 1);
    }

    // Освобождение памяти
    for (int i = 0; i < m; i++) {
        free(matrix[i]);
    }
    free(matrix);

    return 0;
}

Вот код. При компиляции выводит якобы строку все как нужно по условию, но при проверке выясняется, что это не так. К примеру, последней строкой код определил номер 4, но при проверке последней строкой оказывается 6-ая. Как исправить?


Ответы (1 шт):

Автор решения: Криштиану Масса

С точки зрения оптимизации решение плохое , но я как понимаю это лаба , так что опустим этот момент, сделайте один цикл for и найдите максимально возможное число одинаковых элементов, потом делаете еще один цикл for где считаете число одинаковых элементов для каждой строки и делаете проверку чтобы число одинаковых элементов для текущей строки было равно максимально возможному числу элементов , если условие выполняется, то заносите индекс i, в любую , и после цикла выводите , если не сработает или будут вопросы пишите в комментарии.

→ Ссылка