Поменять местами максимальный элемент выше главной диагонали и минимальный ниже ее - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д