В матрице поменять местами столбцы с максимальным и минимальным значением суммы элементов - C (СИ)
Формулировка задачи:
Народ, задача звучит так: необходимо в задаче размерностью N<=5, M<=10 (кол-во строк столбцов вводится вначале программы) вычислить сумму элементов для каждого столбца и поменять местами столбцы с максимальным и минимальным значением суммы, ну и собственно, отобразить полученную после свопа матрицу.
Ввод матрицы, отображение исходной матрицы и сумму столбцов я написал, а вот как найти максимальное и минимальное значение суммы, а затем свопнуть соответствующие столбцы я не знаю. Можете помочь доделать/переделать программу?
Исходный код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
int n,m;
printf("Enter n: ");
scanf("%d", &n);
printf("\nEnter m: ");
scanf("%d", &m);
printf("\n");
////////////////////////////
int mas[n][m];
int i,j;
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
printf("a[%d,%d] = ", i, j);
scanf("%d", &mas[i][j]);
}
}
printf("\n");
////////////////////////////
printf("\n---MATRIX---\n\n");
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
printf("%d ", mas[i][j]);
}
printf("\n");
}
printf("\n");
////////////////////////////
printf("\n---COLUMN SUMM---\n\n");
for (j=1; j<=m; j++)
{
int s=0;
for (i=1; i<=n; i++)
{
s+=mas[i][j];
}
printf("COL %d | %d\n", j, s);
}
printf("\n");
}Решение задачи: «В матрице поменять местами столбцы с максимальным и минимальным значением суммы элементов»
textual
Листинг программы
#include <stdio.h>
int main()
{
int n,m,max=-999,min=-999,max_index=0,min_index=0;
printf("Enter n: ");
scanf("%d", &n);
printf("\nEnter m: ");
scanf("%d", &m);
printf("\n");
////////////////////////////
int mas[n][m];
int i,j;
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
{
printf("a[%d,%d] = ", i, j);
scanf("%d", &mas[i][j]);
}
}
printf("\n");
////////////////////////////
printf("\n---MATRIX---\n\n");
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
{
printf("%d ", mas[i][j]);
}
printf("\n");
}
printf("\n");
////////////////////////////
printf("\n---COLUMN SUMM---\n\n");
for (j=0; j<m; j++)
{
int s=0;
for (i=0; i<n; i++)
{
s+=mas[i][j];
}
printf("COL %d | %d\n", j, s);
if(s>max)
{
max=s;
max_index=j;
}
if(s<min)
{
min=s;
min_index=j;
}
}
printf("\n");
//------swap----------
int tmp;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
tmp=mas[i][min_index];
mas[i][min_index]=mas[i][max_index];
mas[i][max_index]=tmp;
}
}
//-------------
//---print---
printf("\n---MATRIX---\n\n");
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
{
printf("%d ", mas[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
Объяснение кода листинга программы
В этом коде выполняются следующие действия:
- Запрашивается у пользователя ввод количества строк и столбцов для создаваемой матрицы с помощью функции scanf().
- Создается матрица, заполняемая пользователем с помощью двух вложенных циклов и функции scanf().
- Выводится на экран созданная матрица с помощью двух вложенных циклов и функции printf().
- Для каждого столбца вычисляется сумма элементов с помощью цикла и функции scanf().
- Если текущая сумма больше максимальной, то обновляются значения максимальной суммы и индекса столбца с максимальной суммой.
- Если текущая сумма меньше минимальной, то обновляются значения минимальной суммы и индекса столбца с минимальной суммой.
- С помощью двух вложенных циклов и временной переменной tmp выполняется перестановка элементов в выбранных столбцах.
- Выводится на экран измененная матрица с помощью двух вложенных циклов и функции printf().
- Программа завершается возвратом значения 0 из функции main().