Cho mảng hai chiều kích thước n x n, nhiệm vụ là in các phần tử của ma trận theo hướng đường chéo xuống.
"Đường chéo xuống" nghĩa là duyệt mảng theo các đường chéo từ trên xuống dưới như hình minh họa:

Chương trình sẽ in 1, sau đó chuyển sang 2, rồi xuống đường chéo đến 4, và tiếp tục...
Ví dụ
Input: Matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }
Output: 1 2 4 3 5 7 6 8 9
Thuật toán
int diagonally_down(int mat[n][n])
BẮT ĐẦU
BƯỚC 1: KHAI BÁO i, j, row, col KIỂU INT
BƯỚC 2: VỚI i = 0 ĐẾN i < n, i++
GÁN row = 0
GÁN col = i
KHI col >= 0 LẶP
IN mat[row][col]
TĂNG row LÊN 1, GIẢM col XUỐNG 1
KẾT THÚC KHI
KẾT THÚC VỚI i
BƯỚC 3: VỚI j = 1 ĐẾN j < n, j++
GÁN row = j
GÁN col = n-1
KHI row < n LẶP
IN mat[row][col]
TĂNG row LÊN 1, GIẢM col XUỐNG 1
KẾT THÚC KHI
KẾT THÚC VỚI j
KẾT THÚC
Chương trình C ví dụ
#include <stdio.h>
#define n 3
int diagonally_down(int mat[n][n]) {
int i, j, row, col;
// In các phần tử phía trên
for (i = 0; i < n; i++) {
row = 0;
col = i;
while (col >= 0) { // Di chuyển xuống từ hàng đầu
printf("%d ", mat[row++][col--]);
}
}
// In các phần tử phía dưới
for (j = 1; j < n; j++) {
row = j;
col = n - 1;
while (row < n) { // Di chuyển từ cột cuối
printf("%d ", mat[row++][col--]);
}
}
}
int main() {
int mat[][n] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
diagonally_down(mat);
return 0;
}
Kết quả
1 2 4 3 5 7 6 8 9