2. MA PHƯƠNG Viết chương trình nhập vào số tự nhiên N (N lẻ), sau đó điền các số từ 1 đến n² vào trong một bảng vuông sao cho tổng các hàng ngang, hàng dọc và hai đường chéo đều bằng nhau. Bảng này được gọi là Ma phương.

2. MA PHƯƠNG Viết chương trình nhập vào số tự nhiên N (N lẻ), sau đó điền các số từ 1 đến n² vào trong một bảng vuông sao cho tổng các hàng ngang, hàng dọc và hai đường chéo đều bằng nhau. Bảng này được gọi là Ma phương. Bắc 276 951 438 3 Tây 7 24 11 16 9 22 15 20 8 21 14 2 19 Đông 25 12 13 5 18 6 4 17 Nam 10 23 Phương pháp: Xuất phát từ ô bên phải của ô nằm giữa. Đi theo hướng đông bắc để điền các số 1, 2, Khi điền số, cần chú ý một số nguyên tắc sau: - Nếu vượt ra phía ngoài bên phải của bảng thì quay trở lại cột đầu tiên. - Nếu vượt ra phía ngoài bên trên của bảng thì quay trở lại dòng cuối cùng. - Nếu số đã điền k chia hết cho N thì số tiếp theo sẽ được viết trên cùng một hàng với k nhưng cách 1 ô về phía bên phải. MAPHUONG.INP 3 MAPHUONG.OUT 276 951 438
Câu trả lời này dùng AI, hãy kiểm tra lại trước khi sử dụng
```python
def create_magic_square(n):
# Khởi tạo bảng vuông n x n
magic_square = [[0] * n for _ in range(n)]

# Bắt đầu từ ô giữa hàng đầu tiên
row, col = 0, n // 2

for num in range(1, n * n + 1):
magic_square[row][col] = num

# Tính toán ô tiếp theo
next_row = (row - 1) % n
next_col = (col + 1) % n

if magic_square[next_row][next_col] != 0: # Nếu ô đó đã được điền
row = (row + 1) % n # Chuyển xuống dòng dưới
else:
row, col = next_row, next_col # Chuyển sang ô tiếp theo

return magic_square

def print_magic_square(magic_square):
for row in magic_square:
print(' '.join(f"{num:2}" for num in row))

# Nhập số tự nhiên N
N = int(input())
if N % 2 == 0:
print("N phải là số lẻ.")
else:
magic_square = create_magic_square(N)
print_magic_square(magic_square)
```

Chương trình trên thực hiện như sau:

1. Đầu tiên, chúng ta khởi tạo một bảng vuông `n x n` chứa toàn số 0.
2. Vị trí bắt đầu để điền số là ô giữa hàng đầu tiên (dòng 0 và cột n//2).
3. Chúng ta sử dụng một vòng lặp để điền các số từ 1 đến n². Với mỗi số:
- Điền số vào ô hiện tại.
- Tính toán vị trí ô tiếp theo theo quy tắc di chuyển ở hướng đông bắc.
- Nếu ô tiếp theo đã có số, thì di chuyển xuống hàng dưới.
4. Cuối cùng, in bảng ma phương ra màn hình.

Các nguyên tắc di chuyển được áp dụng là:
- Nếu vượt ra ngoài bên phải bảng, quay lại cột đầu tiên.
- Nếu vượt ra ngoài bên trên bảng, quay về dòng cuối.
- Nếu ô mà số đang tính đã có giá trị (khác 0), di chuyển xuống ô bên dưới.

Với cách làm này, chúng ta có thể tạo ra bảng ma phương cho bất kỳ số lẻ N nào được nhập vào, đảm bảo tổng các hàng, cột và đường chéo đều bằng nhau.
Đăng phản hồi