Вход/Регистрация
40 задач на Python
вернуться

Девис Джеймс

Шрифт:

3. Пример использования:

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

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

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

2. Магические квадраты

Описание задачи: Магический квадрат – это квадратная матрица размером (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)]

# Проверка и вывод результата

if is_magic_square(matrix):

print("YES")

else:

print("NO")

```

Этот код считывает входные данные, проверяет, является ли матрица магическим квадратом, и выводит соответствующий результат.

Подробное объяснение кода проверки магического квадрата

Шаг 1: Считывание размерности матрицы и её элементов

– Код: `n = int(input)`

– Здесь используется функция `input` для чтения входного значения, представляющего размерность матрицы. Функция `int` преобразует строку в целое число.

– Код: `matrix = [list(map(int, input.split)) for _ in range(n)]`

– Этот код считывает ( n ) строк, каждая из которых содержит ( n ) чисел.

– `input.split` считывает строку и разбивает её по пробелам, возвращая список строк.

– `map(int, …)` преобразует каждую строку в целое число.

– `list(…)` собирает эти числа в список.

– Внешний цикл `for _ in range(n)` выполняется ( n ) раз, собирая все строки в список списков (матрицу).

Шаг 2: Проверка уникальности чисел от 1 до ( n^2 )

– Код: `all_numbers = set(range(1, n*n + 1))`

– `range(1, n*n + 1)` создает последовательность чисел от 1 до ( n^2 ).

– `set(…)` преобразует эту последовательность в множество для удобства проверки уникальности.

– Код: `numbers_in_matrix = set(num for row in matrix for num in row)`

– Вложенный генератор `num for row in matrix for num in row` проходит по всем элементам матрицы и собирает их в множество `numbers_in_matrix`.

– Эта строка кода проверяет, что все числа от 1 до ( n^2 ) присутствуют в матрице и являются уникальными.

  • Читать дальше
  • 1
  • ...
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: