Поменять местами максимальный элемент выше главной диагонали и минимальный ниже ее - C (СИ)

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

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

Всем доброго времени суток! Смотрите, у меня получился код, который меняет местами (отражает зеркально) элементы, расположенные выше главной и побочной диагоналей и ниже их. Элементы диагоналей не затронуты. А мне нужно чтобы был найден максимальный элемент выше главной диагонали и минимальный – ниже ее, и нужно их поменять местами. У кого какие соображения? Я так понимаю нужно поменять условия, начиная с 3 цикла for. Должно быть как на картинке. Код:
#include <stdio.h> //inclusion of libraries
#include <conio.h>
#include <math.h>
#include <time.h>
 
int main()
{
int i, j, n, massiv_min, massiv_max,swap;
 
time_t t;   // actual time for initialization
// of random number generator
 
srand((unsigned) time(&t)); // generator initialization
 
printf("\nInput the lower border of range:");
scanf("%d", &massiv_min);
printf("\nInput the upper border of range:");
scanf("%d", &massiv_max);
printf("\nInput number of rows and columns:");
scanf("%d", &n);

int massiv[n][n];
 
printf("\nSource massive:\n");
 
for (i=0; i<n; i++)
{
// getting of random number in range
// for massiv_min to massuv_max
 
for (j=0; j<n; j++)
{
massiv[i][j]=rand()%(massiv_max-massiv_min + 1) + massiv_min;
printf("%7d", massiv[i][j]);
 
}
printf("\n");
}
printf("\n");
 
for (i=0;i<=n/2;i++)
{
for (j=i+1;j<n-(i+1);j++)
{
swap=massiv[i][j];
massiv[i][j]=massiv[n-(i+1)][j];
massiv[n-(i+1)][j]=swap;
}
 
}
printf("\n");
printf("\nNew massive:\n");
 
for (i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%7d", massiv[i][j]);
 
printf("\n");
}
 
return 0;
}
//function description

Решение задачи: «Поменять местами максимальный элемент выше главной диагонали и минимальный ниже ее»

textual
Листинг программы
int iMax=0, jMax=1; // индексы максимального элемента
int iMin=1, jMin=0; // индексы минимального элемента
 
for (i=0; i<n; i++)
    for (j=0; j<n; j++)
    {
        if (i < j) // выше главной диагонали
        {
            if (massiv[i][j] > massiv[iMax][jMax])
            {
                iMax = i;
                jMax = j;
            }
        }
        else if (i > j) // ниже главной диагонали
        {
            if (massiv[i][j] < massiv[iMin][jMin])
            {
                iMin = i;
                jMin = j;
            }
        }
    }
 
swap = massiv[iMax][jMax];
massiv[iMax][jMax] = massiv[iMin][jMin];
massiv[iMin][jMin] = swap;

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

  1. Вначале объявляются четыре переменные: iMax, jMax, iMin и jMin. Они используются для хранения индексов максимального и минимального элементов.
  2. Начальные значения iMax и jMax устанавливаются равными 0 и 1 соответственно, что означает, что начальный максимальный элемент находится в позиции (0,0). Начальные значения iMin и jMin устанавливаются равными 1 и 0 соответственно, что означает, что начальный минимальный элемент находится в позиции (1,0).
  3. Затем следует вложенный двойной цикл for, который проходит по всем элементам массива.
  4. Если текущий элемент находится выше главной диагонали (то есть i < j), то проверяется, является ли он максимальным среди уже найденных максимальных элементов. Если это так, то обновляются значения iMax и jMax.
  5. Если текущий элемент находится ниже главной диагонали (то есть i > j), то проверяется, является ли он минимальным среди уже найденных минимальных элементов. Если это так, то обновляются значения iMin и jMin.
  6. После завершения циклов, в переменной swap хранится значение элемента, находящегося в позиции (iMax, jMax).
  7. Затем происходит обмен значениями между элементами в позициях (iMax, jMax) и (iMin, jMin), используя переменную swap.

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

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