Cho một ma trận vuông 2D làm đầu vào. Mục tiêu là tìm các phần tử chung giữa đường chéo chính và đường chéo phụ. Nếu ma trận đầu vào là
1 2 3 2 2 4 1 4 7
Thì đường chéo chính là 1 2 7 và đường chéo phụ là 3 2 1. Phần tử chung là 2.
Luôn có ít nhất một phần tử chung trong cả hai đường chéo.
Ví dụ
Đầu vào - Matrix[][5] = {{1, 2, 1}, {4, 1, 6}, {1, 8, 1}};
Đầu ra - Các phần tử chung theo hàng trong đường chéo: 3
Giải thích - Ma trận là:
1 2 1 4 1 6 1 8 1
Đường chéo chính = 1 1 1, Đường chéo phụ = 1 1 1
Cả 3 giá trị đều chung. count = 3
Đầu vào - Matrix[][5] = {{1, 4, 4, 1}, {3, 4, 4, 6}, {1, 1, 1, 4}, {1, 9, 9, 2}};
Đầu ra - Các phần tử chung theo hàng trong đường chéo: 3
Giải thích - Ma trận là:
1 4 4 1 3 4 4 6 1 1 1 4 1 9 9 2
Đường chéo chính = 1 4 1 2, Đường chéo phụ = 1 4 1 1
Ba giá trị đầu tiên chung. count = 3
Phương pháp sử dụng trong chương trình dưới đây
Trong phương pháp này, duyệt ma trận vuông theo hàng từ hàng 0. Với mỗi hàng kiểm tra nếu phần tử M[i][i] bằng M[i][size-i-1] thì đó là phần tử chung của cả hai đường chéo, tăng biến đếm.
Nhập ma trận đầu vào Matrix[][5].
Đặt kích thước size.
Hàm countElement(int mt[][5], int size) nhận ma trận và kích thước, trả về số lượng giá trị chung trong cả hai đường chéo chính và phụ.
Khởi tạo count = 0.
Duyệt vòng lặp for từ i=0 đến i<size.
Nếu mt[i][i] == mt[i][size-i-1] thì tăng count.
Cuối cùng trả về count làm kết quả.
In kết quả trong main.
Ví dụ mã
#include <iostream> using namespace std; int countElement(int mt[][5], int size){ int count = 0; for (int i=0;i<size;i++){ if (mt[i][i] == mt[i][size-i-1]){ count=count+1; } } return count; } int main(){ int Matrix[][5] = {{1, 2, 1}, {4, 1, 6}, {1, 8, 1}}; int size=3; cout<<"Các phần tử chung theo hàng trong đường chéo:"<<countElement(Matrix, size); return 0; }
Đầu ra
Nếu chạy mã trên sẽ cho kết quả:
Các phần tử chung theo hàng trong đường chéo:3