Определить номера строк и столбцов всех седловых точек матрицы - C (СИ)
Формулировка задачи:
Дана целочисленная прямоугольная матрица. Определить:
1) сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент;
2) номера строк и столбцов всех седловых точек матрицы.
ПРИМЕЧАНИЕ:
Матрица А имеет седловую точку Аij, если Aij является минимальным элементом в i-й строке и максимальным в j-м столбце.
Матрица 8x8
int matrix[8][8] = { { 2, 7, 2, 7, 1, 4, 0, 3 }, { 1, 0, 7, 6, 0, -8, 3, 5 }, { 2, 7, 1, 8, 1, 4, 9, 3 }, { 9, 2, 8, 5, 2, 0, 0, 6 }, { 7, 1, 1, 3, 9, 3, 9, 1 }, { 8, 2, 4, 9, 1, -6, 4, 9 }, { 0, 3, 9, 0, 9, 4, 8, 8 }, { 1, 8, 3, 2, 8, 2, 8, 0 } };
Решение задачи: «Определить номера строк и столбцов всех седловых точек матрицы»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int matrix[8][8] = { { 2, 7, 2, 7, 1, 4, 0, 3 }, { 1, 0, 7, 6, 0, -8, 3, 5 }, { 2, 7, 1, 8, 1, 4, 9, 3 }, { 9, 2, 8, 5, 2, 0, 0, 6 }, { 7, 1, 1, 3, 9, 3, 9, 1 }, { 8, 2, 4, 9, 1, -6, 4, 9 }, { 0, 3, 9, 0, 9, 4, 8, 8 }, { 1, 8, 3, 2, 8, 2, 8, 0 } }; int min_row(int n) { int j, k, m; k = 0; m = matrix[n][0]; for(j = 1; j < 8; j++) if(matrix[n][j]<m){ m = matrix[n][j]; k = j; } return k; } int max_column(int n) { int j, k, m; k = 0; m = matrix[0][n]; for(j = 1; j < 8; j++) if(matrix[j][n]>m){ m = matrix[j][n]; k = j; } return k; } int main() { int sum, negative; int i, j; for(i = 0; i < 8; i++){ for(j = 0; j < 8; j++) printf("%d\t", matrix[i][j]); printf("\n"); } printf("Сумма элементов в строках с хотя бы одним отрицательным элементом:\n"); for(i = 0; i < 8; i++){ sum = 0; negative = 0; for(j = 0; j < 8; j++){ if(matrix[i][j] < 0) negative = 1; sum += matrix[i][j]; } if(negative == 1) printf("Строка: %d,\tсумма:%d\n", i, sum); } printf("Седловые точки:\n"); for(i = 0; i < 8; i++){ j = min_row(i); if(max_column(j) == i) printf("Строка: %d,\tСтолбец: %d\n", j, i); } return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д