В двумерном массиве поменять местами строку с максимальной суммой с минимальной суммой - 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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с I/O и определения размеров массива
  2. Задаем размеры массива N и K, а также инициализируем двумерный массив m[N][K] с помощью диагональных элементов равных 1
  3. Инициализируем переменные i1 и i2 для хранения индексов строк с максимальной и минимальной суммой соответственно, а также переменные sm1 и sm2 для хранения сумм этих строк
  4. Проходим по всем элементам массива m[N][K] и суммируем элементы каждой строки, сохраняя результат в переменную sum
  5. Если текущая строка имеет максимальную сумму среди всех еще не определенных строк, то обновляем значения i1 и sm1. Если минимальную - то обновляем значения i2 и sm2
  6. После прохода по всем строкам, проверяем, были ли определены строки с максимальной и минимальной суммой. Если да, то меняем их местами, используя вложенные циклы
  7. Выводим полученный массив на экран, используя цикл for и функцию printf для вывода каждого элемента массива, разделенного пробелом
  8. Возвращаем 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы