Vuông ma thuật là ma trận vuông, bậc lẻ, mà tổng các phần tử mỗi hàng, mỗi cột hoặc mỗi đường chéo đều bằng nhau.

Tổng mỗi hàng, cột, đường chéo có thể tính bằng công thức: n(n² + 1)/2
Các quy tắc xây dựng vuông ma thuật:
- Bắt đầu từ cột giữa của hàng đầu tiên, luôn đi đến góc trên bên trái để đặt số tiếp theo.
- Nếu hàng vượt quá phạm vi, đổi cột sang cột trái và đặt số ở hàng cuối cùng, tiếp tục đi góc trên bên trái.
- Nếu cột vượt quá phạm vi, đổi hàng sang hàng đầu tiên và đặt số ở cột cuối cùng, tiếp tục đi góc trên bên trái.
- Khi góc trên bên trái không trống hoặc cả hàng và cột đều vượt phạm vi, đặt số ngay dưới số vừa đặt.
Đầu vào và Đầu ra
Đầu vào: Bậc ma trận 5 Đầu ra: 15 8 1 24 17 16 14 7 5 23 22 20 13 6 4 3 21 19 12 10 9 2 25 18 11
Thuật toán
createSquare(mat, r, c)
Đầu vào: Ma trận.
Đầu ra: Hàng và Cột.
Begin
count := 1
điền 0 cho tất cả phần tử mat
range := r * c
i := 0
j := c/2
mat[i, j] := count // giữa hàng đầu
while count < range, do
tăng count 1
if cả i và j vượt phạm vi, then
tăng i 1
else if chỉ i vượt phạm vi, then
i := c – 1
giảm j 1
else if chỉ j vượt phạm vi, then
j := c – 1
giảm i 1
else if i, j trong phạm vi và mat[i, j] ≠ 0, then
tăng i 1
else
giảm i và j 1
mat[i, j] := count
done
hiển thị ma trận mat
EndVí dụ (C++)
#include#include using namespace std; void createSquare(int **array, int r, int c) { int i, j, count = 1, range; for(i = 0; i > row; col = row; matrix = new int*[row]; for(int i = 0; i |
Đầu ra
Nhập bậc (lẻ) của ma trận vuông: 5 15 8 1 24 17 16 14 7 5 23 22 20 13 6 4 3 21 19 12 10 9 2 25 18 11