18+
реклама
18+
Бургер менюБургер меню

Джеймс Дэвис – 40 задач на Python (страница 9)

18

– В примере использования задается ребус `"SEND + MORE = MONEY"`.

– Функция `solve_rebus` вызывается с этим ребусом.

– Если найдено решение, оно выводится на экран. Если решение не найдено, выводится сообщение "Решение не найдено."

Описание задачи: Магический квадрат – это квадратная матрица размером (n \times n), заполненная числами от 1 до (n^2) таким образом, что суммы чисел в каждой строке, каждом столбце и обеих диагоналях равны.

Ваша задача – написать программу, которая проверяет, является ли данная матрица магическим квадратом.

Формат ввода:

– В первой строке задается одно целое число (n) ((1 leq n leq 100)) – размерность матрицы.

– В следующих (n) строках содержится по (n) целых чисел, разделенных пробелами, – элементы матрицы.

Формат вывода:

– Выведите `YES`, если матрица является магическим квадратом.

– Выведите `NO` в противном случае.

Пример 1:

Ввод:

3

8 1 6

3 5 7

4 9 2

Вывод: YES

Пример 2:

Ввод:

3

2 7 6

9 5 1

4 3 8

Вывод: NO

Пример 3:

Ввод:

2

1 2

3 4

Вывод: NO

Решение:

1. Считать размерность матрицы (n) и её элементы.

2. Проверить, что все числа от 1 до (n^2) присутствуют в матрице.

3. Вычислить сумму первой строки (или любого другого ряда) как эталонную сумму.

4. Проверить, что суммы всех строк, столбцов и диагоналей равны эталонной сумме.

5. Вывести результат проверки.

Пример кода на Python:

```python

def is_magic_square(matrix):

n = len(matrix)

# Проверка, что все числа от 1 до n^2 присутствуют

all_numbers = set(range(1, n*n + 1))

numbers_in_matrix = set(num for row in matrix for num in row)

if all_numbers != numbers_in_matrix:

return False

# Вычисление эталонной суммы

magic_sum = sum(matrix[0])

# Проверка строк

for row in matrix:

if sum(row) != magic_sum:

return False

# Проверка столбцов

for col in range(n):

if sum(matrix[row][col] for row in range(n)) != magic_sum:

return False

# Проверка диагоналей

if sum(matrix[i][i] for i in range(n)) != magic_sum:

return False

if sum(matrix[i][n-i-1] for i in range(n)) != magic_sum:

return False

return True

# Чтение данных

n = int(input())

matrix = [list(map(int, input().split())) for _ in range(n)]