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