Как поменять первый элемент столбца с макс. элементом а 2-ой с минимальным?

Дана матрица С размером МхN. Нужно поменять первый элемент каждого столбца матрицы С с максимальным элементом этого столбца, второй элемент этого столбца с минимальным элементом этого столбца. Вывести заданную и новообразованную матрицу. Помогите дополнить код Почему-то не выводится все минимумы и максимумы. Вот мой код:

     #include<time.h>
#include<stdlib.h>
#include <stdio.h>

int main()
{
   srand ( time(NULL) );
   int Row, Col;
   printf("Input Rows =  ");
   scanf("%i", &Row);
   printf("Input Columns =  ");
   scanf("%i", &Col);
   int array[Row][Col], minColumn, maxColumn;
  
   printf("\n-------------Generated Array---------------\n");
   for (int i=0; i<Row; i++){
       for(int j=0; j<Col; j++){
       array[i][j]=rand()%100;
       printf("%i\t", array[i][j]);
       }
       printf("\n");
    }
    
       printf("\n-------------New Array---------------\n");
   for(int i=0; i<Col; i++){
   minColumn=array[0][i];
   maxColumn=array[0][i];
   int minindex = 0; 
   int maxindex = 0; 
   for (int j=1; j<Row; j++){
        if(maxColumn<array[j][i]){
           maxColumn=array[j][i];
           maxindex = j;
        }
        if(minColumn>array[j][i]){
         minColumn=array[j][i];
         minindex = j;
        }
   }
   int t;
   t = array[0][i];
   array[0][i] = array[maxindex][i];
   array[maxindex][i] = t;
   if (minindex == 0) minindex = maxindex; 
   t = array[1][i];
   array[1][i] = array[minindex][i];
   array[minindex][i] = t;
}
       for (int i=0; i<Row; i++){
       for(int j=0; j<Col; j++){
       printf("%i\t", array[i][j]);
       }
       printf("\n");
    }
    

Ответы (1 шт):

Автор решения: MBo

Вижу, инициализацию минимума и максимума из цикла вынесли, но у вас с индексами осталась путаница. Первый индекс - это строка, второй - столбец. И для обмена понадобится не значение, а индекс элемента в столбце

for(int i=0; i<Col; i++){
   minColumn=array[0][i];
   maxColumn=array[0][i];
   minindex = 0; 
   maxindex = 0; 
   for (int j=1; j<Row; j++){
        if(maxColumn<array[j][i]){
           maxColumn=array[j][i];
           maxindex = j;
        }
        if(minColumn>array[j][i]){
         minColumn=array[j][i];
         minindex = j;
        }
   }
   //printf("\nmaxColumn = %i\tminColumn = %i\n", maxColumn,minColumn);
   int t;
   t = array[0][i];
   array[0][i] = array[maxindex][i];
   array[maxindex][i] = t;
   if (minindex == 0) minindex = maxindex; 
   t = array[1][i];
   array[1][i] = array[minindex][i];
   array[minindex][i] = t;
}
→ Ссылка