Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Vuông ma thuật (Magic Square)


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.

Vuông ma thuật (Magic Square)

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
End

Ví 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