Для заданной целой матрицы размером 10 x 12 напечатать индексы всех ее седловых точек - C (СИ)

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

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

Элемент матрицы назовем седловой точкой, если он наименьший в своей строке и наибольший (одновременно) в своем столбце (или наоборот, наибольший в своей строке и наименьший в своем столбце). Для заданной целой матрицы размером 10 x 12 напечатать индексы всех ее седловых точек.

Решение задачи: «Для заданной целой матрицы размером 10 x 12 напечатать индексы всех ее седловых точек»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <locale.h>
  3.  
  4. #define ROWS (10)
  5. #define COLUMNS (12)
  6.  
  7. int main(void) {
  8.     setlocale(LC_ALL, "Russian");
  9.     int matrix[ROWS][COLUMNS] = {
  10.             { 2, 3, 5, 2, 3, 5, 2, 3, 5, 2, 3, 5 },
  11.             { 2, 4, 6, 2, 2, 4, 6, 2, 2, 4, 6, 2 },
  12.             { -2, 7, 2, 0,-2, 7, 2, 0,-2, 7, 2, 0 },
  13.             { 2, 3, 5, 2, 3, 5, 2, 3, 5, 2, 3, 5 },
  14.             { 2, 4, 6, 2, 2, 4, 6, 2, 2, 4, 6, 2 },
  15.             { -2, 7, 2, 0,-2, 7, 2, 0,-2, 7, 2, 0 },
  16.             { 2, 3, 5, 2, 3, 5, 2, 3, 5, 2, 3, 5 },
  17.             { 2, 4, 6, 2, 2, 4, 6, 2, 2, 4, 6, 2 },
  18.             { -2, 7, 2, 0,-2, 7, 2, 0,-2, 7, 2, 0 },
  19.             { 2, 3, 5, 2, 3, 5, 2, 3, 5, 2, 3, 5  },
  20.         },
  21.         minRows[ROWS][COLUMNS] = { 0 }, maxRows[ROWS][COLUMNS] = { 0 },
  22.         minCols[ROWS][COLUMNS] = { 0 }, maxCols[ROWS][COLUMNS] = { 0 },
  23.         i, j, saddlesFound = 0;
  24.    
  25.     printf("Матрица :\n");
  26.     for ( i = 0; i < ROWS; ++i ) {
  27.         for ( j = 0; j < COLUMNS; ++j )
  28.             printf("%3d ", matrix[i][j]);
  29.         printf("\n");
  30.     }
  31.     printf("\n");
  32.    
  33.     for ( i = 0; i < ROWS; ++i ) {
  34.         int minRowVal = matrix[i][0], maxRowVal = matrix[i][0];
  35.        
  36.         for ( j = 1; j < COLUMNS; ++j ) {
  37.             if ( matrix[i] + j < minRowVal )
  38.                 minRowVal = matrix[i][j];
  39.             if ( matrix[i] + j > maxRowVal )
  40.                 maxRowVal = matrix[i] + j;
  41.         }
  42.        
  43.         for ( j = 0; j < COLUMNS; ++j ) {
  44.             if ( matrix[i] + j == minRowVal )
  45.                 minRows[i][j] = 1;
  46.             if ( matrix[i] + j == maxRowVal )
  47.                 maxRows[i][j] = 1;
  48.         }
  49.     }
  50.    
  51.     for ( j = 0; j < COLUMNS; ++j ) {
  52.         int minColVal = matrix[0][j], maxColVal = matrix[0][j];
  53.        
  54.         for ( i = 1; i < ROWS; ++i ) {
  55.             if ( matrix[i][j] < minColVal )
  56.                 minColVal = matrix[i][j];
  57.             if ( matrix[i][j] > maxColVal )
  58.                 maxColVal = matrix[i][j];
  59.         }
  60.        
  61.         for ( i = 0; i < ROWS; ++i ) {
  62.             if ( matrix[i] + j == minColVal )
  63.                 minCols[i][j] = 1;
  64.             if ( matrix[i] + j == maxColVal )
  65.                 maxCols[i][j] = 1;
  66.         }
  67.     }
  68.    
  69.     for ( i = 0; i < ROWS; ++i ) {
  70.         for ( j = 0; j < COLUMNS; ++j ) {
  71.             if ( ( minRows[i][j] & maxCols[i][j] ) || ( maxRows[i][j] & minCols[i][j] ) ) {
  72.                 printf("Седловая точка :[%d][%d] = %d\n", i, j, matrix[i][j]);
  73.                 ++saddlesFound;
  74.             }
  75.         }
  76.     }
  77.    
  78.     printf("\n%d седловых точек найдено.\n", saddlesFound);
  79.    
  80.     return 0;
  81. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

11   голосов , оценка 3.818 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы