Giả sử chúng ta được cho một ma trận vuông kích thước n * n. Các giá trị sau của ma trận được gọi là các phần tử đặc biệt:
Các giá trị nằm trên đường chéo chính.
Các giá trị nằm trên đường chéo phụ.
Các giá trị của hàng có đúng (n - 1 / 2) hàng phía trên và cùng số hàng phía dưới.
Các giá trị của cột có đúng (n - 1 / 2) cột bên trái và bên phải.
Chúng ta tìm tổng các giá trị đặc biệt này trong ma trận.
Ví dụ, nếu đầu vào là n = 4, mat = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}, thì đầu ra sẽ là 107.
Các bước thực hiện
Để giải quyết bài toán này, chúng ta thực hiện theo các bước sau:
res := 0 for khởi tạo i := 0, khi i < n, cập nhật (tăng i lên 1), do: for khởi tạo j := 0, khi j < n, cập nhật (tăng j lên 1), do: if i giống j hoặc i giống n / 2 hoặc j giống n/ 2 hoặc i + j giống n - 1, thì: res := res + mat[i, j] in(res)
Ví dụ minh họa
Xem triển khai sau để hiểu rõ hơn:
#include <bits/stdc++.h> using namespace std; #define N 100 void solve(int n, vector<vector<int>> mat) { int res = 0; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++){ if (i == j || i == n / 2 || j == n / 2 || i + j == n - 1) res += mat[i][j]; } cout << res << endl; } int main() { int n = 4; vector<vector<int>> mat = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; solve(n, mat); return 0; }Đầu vào
4, {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}Đầu ra
107