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