Про количество отрицательных элементов и седловые точки
1 минут
Задача🔗︎
Дана целочисленная прямоугольная матрица.
Определить:
- количество отрицательных элементов в тех строках, которые содержат хотя бы один нулевой элемент;
- номера строк и столбцов всех седловых точек матрицы.
Примечание. Матрица А имеет седловую точку 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