Trung bình sửa đổi của ma trận được định nghĩa như sau:
(tổng min hàng + tổng max cột) / (số hàng + số cột)
Chúng ta cần tính giá trị trung bình này, sau đó đếm số phần tử trong ma trận lớn hơn giá trị đó.
Ví dụ
Ma trận 3x3:
1 2 3 4 5 6 7 8 9
- Min hàng: 1, 4, 7 → Tổng = 12
- Max cột: 7, 8, 9 → Tổng = 24
- Trung bình = (12 + 24) / (3 + 3) = 6
- Các phần tử > 6: 7, 8, 9 → Kết quả = 3
Thuật toán
- Khởi tạo ma trận.
- Tính tổng các phần tử nhỏ nhất theo hàng.
- Tính tổng các phần tử lớn nhất theo cột.
- Tính trung bình sửa đổi theo công thức.
- Đếm số phần tử > trung bình.
Triển khai C++
#include <bits/stdc++.h>
using namespace std;
#define M 3
#define N 3
int getElementCountGreaterThanMean(int matrix[][N]) {
int rowSum = 0;
for (int i = 0; i < M; i++) {
int minVal = matrix[i][0];
for (int j = 1; j < N; j++)
if (matrix[i][j] < minVal) minVal = matrix[i][j];
rowSum += minVal;
}
int colSum = 0;
for (int j = 0; j < N; j++) {
int maxVal = matrix[0][j];
for (int i = 1; i < M; i++)
if (matrix[i][j] > maxVal) maxVal = matrix[i][j];
colSum += maxVal;
}
int mean = (rowSum + colSum) / (M + N);
int count = 0;
for (int i = 0; i < M; i++)
for (int j = 0; j < N; j++)
if (matrix[i][j] > mean) count++;
return count;
}
int main() {
int matrix[M][N] = {{1,2,3}, {4,5,6}, {7,8,9}};
cout << getElementCountGreaterThanMean(matrix) << endl;
return 0;
}
Kết quả
3