Напишите программу, которая проверяет, является ли заданная квадратная матрица латинским квадратом. Латинский квадрат – это квадратная матрица размером n x n, каждая строка и каждый столбец которой содержат все числа от 1 до n. В Средние века латинским квадратам приписывались магические свойства: такие таблицы использовались во время проведения оккультных ритуалов. Напишите программу для определения латинского квадрата. Входные данные: число n – количество строк и столбцов в матрице; n строк, c n чисел в каждой. Выходные данные: Программа должна вывести YES, если введенная матрица является латинским квадратом, и NO в обратном случае. # Пример ввода: 4 2 3 4 1 3 4 1 2 4 1 2 3 1 2 3 4 Пример вывода: #YES Решение Первый способ– с использованием функции sorted(): n = int(input()) matrix = [[int(i) for i in input().split()] for _ in range(n)] for i in range(n): if sorted(matrix[i]) != list(range(1, n + 1)) or sorted([matrix[j][i] for j in range(n)]) != list(range(1, n + 1)): print('NO') break else: print('YES') Второй способ – с использованием функции all(): n = int(input()) square = [[*map(int,input().split()) ] for i in range(n)] a = all([all([c in row for c in range(1,n + 1)]) for row in square]) b = all([all([c in row1 for c in range(1, n + 1)]) for row1 in zip(*square)]) print(('NO','YES')[a and b]) Третий способ – с использованием транспонирования и множеств: n = int(input()) sq_set = set(range(1, n + 1)) square = [] for i in range(n): square.append(list(map(int, input().split()))) tr_square = list(map(list, zip(*square))) vector_1 = [set(row) == sq_set for row in square] vector_2 = [set(row) == sq_set for row in tr_square] vector = vector_1 + vector_2 if all(vector): print('YES') else: print('NO') *** Материалы по теме 🐍 Словари в Python: 12 задач для начинающих с решениями 🐍 Python и динамическое программирование на примере задачи о рюкзаке 🐍 Известная задача с потерянным билетом: реализация на Python
Латинский квадрат – это квадратная матрица размером n x n, каждая строка и каждый столбец которой содержат все числа от 1 до n. В Средние века латинским квадратам приписывались магические свойства: такие таблицы использовались во время проведения оккультных ритуалов. Напишите программу для определения латинского квадрата.
1
n
Входные данные:
Выходные данные:
Программа должна вывести YES, если введенная матрица является латинским квадратом, и NO в обратном случае.
YES
NO
# Пример ввода: 4 2 3 4 1 3 4 1 2 4 1 2 3 1 2 3 4 Пример вывода: #YES
Первый способ– с использованием функции sorted():
sorted()
n = int(input()) matrix = [[int(i) for i in input().split()] for _ in range(n)] for i in range(n): if sorted(matrix[i]) != list(range(1, n + 1)) or sorted([matrix[j][i] for j in range(n)]) != list(range(1, n + 1)): print('NO') break else: print('YES')
Второй способ – с использованием функции all():
all()
n = int(input()) square = [[*map(int,input().split()) ] for i in range(n)] a = all([all([c in row for c in range(1,n + 1)]) for row in square]) b = all([all([c in row1 for c in range(1, n + 1)]) for row1 in zip(*square)]) print(('NO','YES')[a and b])
Третий способ – с использованием транспонирования и множеств:
n = int(input()) sq_set = set(range(1, n + 1)) square = [] for i in range(n): square.append(list(map(int, input().split()))) tr_square = list(map(list, zip(*square))) vector_1 = [set(row) == sq_set for row in square] vector_2 = [set(row) == sq_set for row in tr_square] vector = vector_1 + vector_2 if all(vector): print('YES') else: print('NO')
***
Ваш адрес email не будет опубликован. Обязательные поля помечены *
Сохранить моё имя, email и адрес сайта в этом браузере для последующих моих комментариев.
Δ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.