Определить номера строк и столбцов всех седловых точек матрицы - 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;
}