В двумерном массиве поменять местами строку с максимальной суммой с минимальной суммой - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Нам задали написать 2 различные проги для такого задания В двумерном массиве поменять местами строку с максимальной суммой с минимальной суммой. Первый код я написал, но для второго нету идей. Под скажите каким способом можно сделать это?
Листинг программы
  1. #include <stdio.h>
  2. #define N 4
  3. #define K 4
  4. void main(void)
  5. {
  6. int mas[N][K], line[K];
  7. int i, j, s = 0, smin = 0, smax = 0, imin, imax;
  8. for (i = 0; i<N; i++)
  9. {
  10. for (j = 0; j<K; j++)
  11. {
  12. scanf("%d", &mas[i][j]);
  13. s += mas[i][j];
  14. }
  15. if (i == 0 || s<smin)
  16. {
  17. smin = s;
  18. imin = i;
  19. }
  20. if (s>smax)
  21. {
  22. smax = s;
  23. imax = i;
  24. }
  25. s = 0;
  26. }
  27. for (j = 0; j<K; j++)
  28. {
  29. line[j] = mas[imin][j];
  30. mas[imin][j] = mas[imax][j];
  31. mas[imax][j] = line[j];
  32. }
  33. printf("\n");
  34. for (i = 0; i<N; i++)
  35. {
  36. for (j = 0; j<K; j++)
  37. printf("%d ", mas[i][j]);
  38. printf("\n");
  39. }
  40. }

Решение задачи: «В двумерном массиве поменять местами строку с максимальной суммой с минимальной суммой»

textual
Листинг программы
  1. #include <stdio.h>
  2. #define N  4
  3. #define K  4
  4.  
  5. int main(void){
  6.     int i, j, i1, i2, sum, sm1, sm2;
  7.     int m[N][K] = {
  8.         { 1, 1, 1, 1 },
  9.         { 2, 2, 2, 2 },
  10.         { 3, 3, 3, 3 },
  11.         { 4, 4, 4, 4 },
  12.     };
  13.    
  14.     i1  = i2  = -1;
  15.     sm1 = sm2 = 0;
  16.     for(i = 0; i < N; ++i){
  17.         sum = 0;
  18.         for(j = 0; j < K; ++j)
  19.             sum += m[i][j];
  20.        
  21.         if((i1 == -1) || (sum > sm1)){
  22.             sm1 = sum;
  23.             i1  = i;
  24.         }
  25.  
  26.         if((i2 == -1) || (sum < sm2)){
  27.             sm2 = sum;
  28.             i2  = i;
  29.         }
  30.     }
  31.  
  32.     if((i1 != -1) && (i2 != -1)){
  33.         //обмен
  34.         for(j = 0; j < K; ++j){
  35.             i = m[i1][j];
  36.             m[i1][j] = m[i2][j];
  37.             m[i2][j] = i;
  38.         }
  39.     }
  40.  
  41.     //вывод
  42.     for(i = 0; i < N; ++i){
  43.         for(j = 0; j < K; ++j)
  44.             printf("%d ", m[i][j]);
  45.         putchar('\n');
  46.     }
  47.     return 0;
  48. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы