Giới thiệu
Cho ma trận mat[n][m]. Phần tử gọi là "positional" nếu nó là lớn nhất hoặc nhỏ nhất trong hàng hoặc cột của nó. Đếm số phần tử như vậy.
Ví dụ minh họa
Đầu vào
mat[][] = {{2, 5, 7},
{1, 3, 4},
{5, 1, 3}}
Đầu ra
8
Giải thích
Các phần tử positional: 2, 5, 7 (hàng 0), 1, 4 (hàng 1), 5, 1, 3 (hàng 2).
Phương pháp giải
Tính trước max/min của mỗi hàng và mỗi cột, sau đó duyệt ma trận kiểm tra điều kiện.
Chương trình minh họa
#include <iostream>
using namespace std;
const int MAX = 100;
int countAllPositionalElements(int mat[][MAX], int m, int n) {
int rowmax[m], rowmin[m];
int colmax[n], colmin[n];
for (int i = 0; i < m; i++) {
int rminn = 10000, rmaxx = -10000;
for (int j = 0; j < n; j++) {
if (mat[i][j] > rmaxx) rmaxx = mat[i][j];
if (mat[i][j] < rminn) rminn = mat[i][j];
}
rowmax[i] = rmaxx; rowmin[i] = rminn;
}
for (int j = 0; j < n; j++) {
int cminn = 10000, cmaxx = -10000;
for (int i = 0; i < m; i++) {
if (mat[i][j] > cmaxx) cmaxx = mat[i][j];
if (mat[i][j] < cminn) cminn = mat[i][j];
}
colmax[j] = cmaxx; colmin[j] = cminn;
}
int positionalCount = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (mat[i][j] == rowmax[i] || mat[i][j] == rowmin[i] ||
mat[i][j] == colmax[j] || mat[i][j] == colmin[j])
positionalCount++;
}
}
return positionalCount;
}
int main() {
int mat[][MAX] = { {2, 5, 7}, {1, 3, 4}, {5, 1, 3} };
int m = 3, n = 3;
cout << "Number of positional elements is " << countAllPositionalElements(mat, m, n);
return 0;
}
Đầu ra
Number of positional elements is 8