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