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