Про количество отрицательных элементов и седловые точки

Дана целочисленная прямоугольная матрица.

Определить:
  1. количество отрицательных элементов в тех строках, которые содержат хотя бы один нулевой элемент;
  2. номера строк и столбцов всех седловых точек матрицы.

Примечание. Матрица А имеет седловую точку A_ij, если A_ij является минимальным элементом в i-й строке и максимальным в j-v столбце.

Решение на C++:
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
	// input stream
	ifstream fin("input.txt", ios::in);
 
	if (!fin) {
		cout << "Error opening input.txt" << endl;
		return 0;
	}
 
	// get size
	int row_count, col_count;
	fin >> row_count >> col_count;
 
	// create array
	int **array = new int *[row_count];
	for (int i = 0; i < row_count; i++) {
		array[i] = new int [col_count];
	}
 
	// entering values
	for (int i = 0; i < row_count; i++) {
		for (int j = 0; j < col_count; j++) {
			fin >> array[i][j];
		}
	}
 
 
	// 1.
	int minus_count = 0, is_zeros = 0;
	for (int i = 0; i < row_count; i++) {
		is_zeros = 0;
 
		for (int j = 0; j < col_count; j++) {
			if (array[i][j] == 0) {
				is_zeros = 1;
				break;
			}
		}
 
		if (is_zeros == 1) {
			minus_count = 0;
 
			for (int j = 0; j < col_count; j++) {
				if (array[i][j] < 0) {
					minus_count++;
				}
			}
 
			cout << "< 0 elem count in " << i << " row: " << minus_count << endl;
		}
	}
 
 
	// 2.
 
	// get min in row
	int *min_row = new int [row_count];
 
	for (int i = 0; i < row_count; i++) {
		min_row[i] = array[i][0];
 
		for (int j = 1; j < col_count; j++) {
			if (min_row[i] > array[i][j]) {
				min_row[i] = array[i][j];
			}
		}
	}
 
	// get max in col
	int *max_col = new int [col_count];
 
	for (int i = 0; i < col_count; i++) {
		max_col[i] = array[0][i];
 
		for (int j = 1; j < row_count; j++) {
			if (max_col[i] < array[j][i]) {
				max_col[i] = array[j][i];
			}
		}
	}
 
	// print saddle point
	for (int i = 0; i < row_count; i++) {
		for (int j = 0; j < col_count; j++) {
			if (array[i][j] == min_row[i] && array[i][j] == max_col[j]) {
				cout << "saddle point: array[" << i << ", " << j << "] = " << array[i][j] << endl;
			}
		}
	}
	cout << endl;
	return 0;
}
Входной файл input.txt:
3 4
2 3 5 2
2 4 6 2
-2 7 2 0
Результат выполнения программы:
< 0 elem count in 2 row: 1
saddle point: array[0, 0] = 2
saddle point: array[0, 3] = 2
saddle point: array[1, 0] = 2
saddle point: array[1, 3] = 2
  • Fixed

    Хороший кусок кода.

    А для чего Вам он нужен, если не секрет?

    • Кое-кому давно делал лабораторные работы для университета, решил выложить.

Перейти к верхней панели