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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <locale.h>
 
#define ROWS (10)
#define COLUMNS (12)
 
int main(void) {
    setlocale(LC_ALL, "Russian");
    int matrix[ROWS][COLUMNS] = {
            { 2, 3, 5, 2, 3, 5, 2, 3, 5, 2, 3, 5 },
            { 2, 4, 6, 2, 2, 4, 6, 2, 2, 4, 6, 2 },
            { -2, 7, 2, 0,-2, 7, 2, 0,-2, 7, 2, 0 },
            { 2, 3, 5, 2, 3, 5, 2, 3, 5, 2, 3, 5 },
            { 2, 4, 6, 2, 2, 4, 6, 2, 2, 4, 6, 2 },
            { -2, 7, 2, 0,-2, 7, 2, 0,-2, 7, 2, 0 },
            { 2, 3, 5, 2, 3, 5, 2, 3, 5, 2, 3, 5 },
            { 2, 4, 6, 2, 2, 4, 6, 2, 2, 4, 6, 2 },
            { -2, 7, 2, 0,-2, 7, 2, 0,-2, 7, 2, 0 },
            { 2, 3, 5, 2, 3, 5, 2, 3, 5, 2, 3, 5  },
        }, 
        minRows[ROWS][COLUMNS] = { 0 }, maxRows[ROWS][COLUMNS] = { 0 }, 
        minCols[ROWS][COLUMNS] = { 0 }, maxCols[ROWS][COLUMNS] = { 0 }, 
        i, j, saddlesFound = 0;
    
    printf("Матрица :\n");
    for ( i = 0; i < ROWS; ++i ) {
        for ( j = 0; j < COLUMNS; ++j )
            printf("%3d ", matrix[i][j]);
        printf("\n");
    }
    printf("\n");
    
    for ( i = 0; i < ROWS; ++i ) {
        int minRowVal = matrix[i][0], maxRowVal = matrix[i][0];
        
        for ( j = 1; j < COLUMNS; ++j ) {
            if ( matrix[i] + j < minRowVal )
                minRowVal = matrix[i][j];
            if ( matrix[i] + j > maxRowVal )
                maxRowVal = matrix[i] + j;
        }
        
        for ( j = 0; j < COLUMNS; ++j ) {
            if ( matrix[i] + j == minRowVal )
                minRows[i][j] = 1;
            if ( matrix[i] + j == maxRowVal )
                maxRows[i][j] = 1;
        }
    }
    
    for ( j = 0; j < COLUMNS; ++j ) {
        int minColVal = matrix[0][j], maxColVal = matrix[0][j];
        
        for ( i = 1; i < ROWS; ++i ) {
            if ( matrix[i][j] < minColVal )
                minColVal = matrix[i][j];
            if ( matrix[i][j] > maxColVal )
                maxColVal = matrix[i][j];
        }
        
        for ( i = 0; i < ROWS; ++i ) {
            if ( matrix[i] + j == minColVal )
                minCols[i][j] = 1;
            if ( matrix[i] + j == maxColVal )
                maxCols[i][j] = 1;
        }
    }
    
    for ( i = 0; i < ROWS; ++i ) {
        for ( j = 0; j < COLUMNS; ++j ) {
            if ( ( minRows[i][j] & maxCols[i][j] ) || ( maxRows[i][j] & minCols[i][j] ) ) {
                printf("Седловая точка :[%d][%d] = %d\n", i, j, matrix[i][j]);
                ++saddlesFound;
            }
        }
    }
    
    printf("\n%d седловых точек найдено.\n", saddlesFound);
    
    return 0;
}

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


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

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

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