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