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