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