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

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


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

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

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