Магическим квадратом порядка n называется квадратная таблица размера n×n, составленная из всех чисел 1,2,3,…,n2 так, что суммы по каждому столбцу, каждой строке и каждой из двух диагоналей равны между собой. Напишите программу, которая проверяет, является ли заданная квадратная матрица магическим квадратом.
Формат входных данных
На вход программе подаётся натуральное число n — количество строк и столбцов в матрице, затем элементы матрицы: n строк, по n чисел в каждой, разделённые пробелами.
Формат выходных данных
Программа должна вывести слово YES, если матрица является магическим квадратом, и слово NO в противном случае.
start, ls, result, n = 0, [], 'YES', int(input()) s = (n**2 * (n**2 + 1))/(2 * n) # сумма столбца в магическом кв for _ in range(n): ls += [int(value) for value in input().split()] if sum(ls[:n**2:n + 1]) != s or sum(ls[n - 1:n**2 - 1:n - 1]) != s: #диагонали result = 'NO' if len(ls) != len(set(ls)): #наличие повторяющихся result = 'NO' if min(ls) != 1 or max(ls) != n**2: # мин и макс result = 'NO' for i in range(n): if sum(ls[i::n]) != s or sum(ls[start:start + n]) != s: # столбцы/строки result = 'NO' break start += n print(result)
