В двумерном массиве поменять местами строку с максимальной суммой с минимальной суммой - C (СИ)
Формулировка задачи:
Нам задали написать 2 различные проги для такого задания В двумерном массиве поменять местами строку с максимальной суммой с минимальной суммой.
Первый код я написал, но для второго нету идей. Под скажите каким способом можно сделать это?
#include <stdio.h> #define N 4 #define K 4 void main(void) { int mas[N][K], line[K]; int i, j, s = 0, smin = 0, smax = 0, imin, imax; for (i = 0; i<N; i++) { for (j = 0; j<K; j++) { scanf("%d", &mas[i][j]); s += mas[i][j]; } if (i == 0 || s<smin) { smin = s; imin = i; } if (s>smax) { smax = s; imax = i; } s = 0; } for (j = 0; j<K; j++) { line[j] = mas[imin][j]; mas[imin][j] = mas[imax][j]; mas[imax][j] = line[j]; } printf("\n"); for (i = 0; i<N; i++) { for (j = 0; j<K; j++) printf("%d ", mas[i][j]); printf("\n"); } }
Решение задачи: «В двумерном массиве поменять местами строку с максимальной суммой с минимальной суммой»
textual
Листинг программы
#include <stdio.h> #define N 4 #define K 4 int main(void){ int i, j, i1, i2, sum, sm1, sm2; int m[N][K] = { { 1, 1, 1, 1 }, { 2, 2, 2, 2 }, { 3, 3, 3, 3 }, { 4, 4, 4, 4 }, }; i1 = i2 = -1; sm1 = sm2 = 0; for(i = 0; i < N; ++i){ sum = 0; for(j = 0; j < K; ++j) sum += m[i][j]; if((i1 == -1) || (sum > sm1)){ sm1 = sum; i1 = i; } if((i2 == -1) || (sum < sm2)){ sm2 = sum; i2 = i; } } if((i1 != -1) && (i2 != -1)){ //обмен for(j = 0; j < K; ++j){ i = m[i1][j]; m[i1][j] = m[i2][j]; m[i2][j] = i; } } //вывод for(i = 0; i < N; ++i){ for(j = 0; j < K; ++j) printf("%d ", m[i][j]); putchar('\n'); } return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с I/O и определения размеров массива
- Задаем размеры массива N и K, а также инициализируем двумерный массив m[N][K] с помощью диагональных элементов равных 1
- Инициализируем переменные i1 и i2 для хранения индексов строк с максимальной и минимальной суммой соответственно, а также переменные sm1 и sm2 для хранения сумм этих строк
- Проходим по всем элементам массива m[N][K] и суммируем элементы каждой строки, сохраняя результат в переменную sum
- Если текущая строка имеет максимальную сумму среди всех еще не определенных строк, то обновляем значения i1 и sm1. Если минимальную - то обновляем значения i2 и sm2
- После прохода по всем строкам, проверяем, были ли определены строки с максимальной и минимальной суммой. Если да, то меняем их местами, используя вложенные циклы
- Выводим полученный массив на экран, используя цикл for и функцию printf для вывода каждого элемента массива, разделенного пробелом
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д