Обмен столбца. Язык С

Обмен столбца

В заданном двумерном массиве целых чисел найти индекс столбца максимального элемента двумерного массива – пусть это column. Требуется поменять местами первый столбец со столбцом с индексом column и вывести получившийся двумерный массив.
Input
Со стандартного устройства ввода в первой строке вводятся 2 целых числа M и N – соответственно количество строк и столбцов двумерного массива: 1<=M<=100, 1<=N<=100. В следующих M строках вводятся ровно по N элементов – значения элементов двумерного массива. Все значения в массиве от -100 до 100.
Output
Требуется вывести получившийся после обмена двумерный массив A. После каждого элемента матрицы требуется выводить пробел.
Sample Input

3 4
1 2 3 3
4 5 6 3
7 8 9 3

Sample Output

3 2 1 3
6 5 4 3
9 8 7 3

Примечание Если максимальный элемент встречается в двумерном массиве более одного раза, то требуется выбрать первый при обходе матрицы по строкам от нулевой до последней.

Мой код:

#include <stdio.h>
int main()
{
    int n, m, i, j, b[100][100],a[100][100],max,v,g;
    scanf("%d%d", &n, &m);
    for (i = 0; i <n ; i++)
        for (j = 0; j <m; j++)
            scanf("%d", &b[i][j]);
    v = 0;
    g = 0;
    max = 0;
    for (i = 0; i < n; i++)
    {
        max = max + b[i][0];
    }
    for (i = 0; i < n; i++)
        a[i][0] = b[i][0];
    for (j = 0; j < m; j++) {
        for (i = 0; i < n; i++)
        {
            g = g + b[i][j];
        }
        if (g > max) {
            max = g;
            v = j;
        }
        g = 0;
    }
    j = v;
    for (i = 0; i < n; i++)
    {
        b[i][0] =b[i][j];
    }
    for (i = 0; i < n; i++)
    {
        b[i][v] = a[i][0];
    }
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++)
            printf("%d ", b[i][j]);
        printf("\n");
    }
    return 0;
}

Набирает 50 из 100, что не так?


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

Автор решения: Алексей Обухов

Решил ответить в ответе, а не в комментарии. Правильный код писать не буду, только свои мысли, как можно решить правильно.
Итак, первую проблему локализовали: нужно считать максимальный элемент, а не сумму.
Проблема вторая, до сих пор не решенная: нужно делать обход матрицы по строкам.

Рассмотрим контрпример, который демонстрирует, что обход по столбцам:

3 4
1 3 1 4
1 3 3 3
2 3 4 4

Получаем ответ:

1 3 1 4
3 3 1 3
4 3 2 4

Смотрим примечание к задаче:

Примечание Если максимальный элемент встречается в двумерном массиве более одного раза, то требуется выбрать первый при обходе матрицы по строкам от нулевой до последней.

Т.е. алгоритм должен был выбрать последний столбец, а не предпоследний. Поэтому тесты все еще выдают ошибку.

→ Ссылка