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