Top.Mail.Ru
Ответы

Вопрос по Python!

Задача:
Проверьте, является ли двумерный массив симметричным относительно главной диагонали. Главная диагональ — та, которая идёт из левого верхнего угла двумерного массива в правый нижний.

Входные данные

Программа получает на вход число n<100, являющееся числом строк и столбцов в массиве. Далее во входном потоке идет n строк по n чисел, являющихся элементами массива.

Выходные данные

Программа должна выводить слово Yes для симметричного массива и слово No для несимметричного.

Моё решение:
matrix = []
p = []
k = []
n = int(input())
for i in range(n):
matrix.append(list(map(int, input().split())))
for i in range(n):
for j in range(n):
if i < j:
p.append(matrix[i][j])
if i > j:
k.append(matrix[i][j])
if k == p:
print('Yes')
else:
print('No')


Короче моё решение не проходит последний тест и я не понимаю почему

По дате
По Рейтингу
Аватар пользователя
Мастер

GPT
Проблема в вашем коде заключается в том, что он не проверяет симметричность относительно главной диагонали правильно. Подход, который вы используете с добавлением элементов в списки p и k, не учитывает симметричность массива.

Вместо этого вы можете сравнивать элементы массива относительно главной диагонали без создания дополнительных списков. Попробуйте следующее решение:

12345678910111213141516171819
 n = int(input()) 
matrix = [] 
for i in range(n): 
    matrix.append(list(map(int, input().split()))) 
 
# Проверка симметричности относительно главной диагонали 
symmetric = True 
for i in range(n): 
    for j in range(i, n):  # Проходим только по верхнему треугольнику матрицы (включая главную диагональ) 
        if matrix[i][j] != matrix[j][i]: 
            symmetric = False 
            break 
    if not symmetric: 
        break 
 
if symmetric: 
    print('Yes') 
else: 
    print('No')  

Этот код сначала считывает входные данные и затем проверяет симметричность матрицы относительно главной диагонали, сравнивая элементы в верхнем треугольнике матрицы (включая главную диагональ). Если хотя бы одна пара элементов не соответствует симметрии, программа выводит 'No'. В противном случае выводится 'Yes'.

Аватар пользователя
Просветленный

5
0 1 2 3 4
1 0 5 6 7
2 5 0 8 9
3 6 8 0 10
4 7 9 10 0
Получаем списки:
1 2 3 4 5 6 7 8 9 10
1 2 5 3 6 8 4 7 9 10
Таким образом, ваше решение и один из ответов неверные

Аватар пользователя
Мудрец

Тебе ж вчера уже отвечали. У меня такой вариант решения. Без ботов, чисто самостоятельно ==>

12345678910111213141516171819202122232425
 m = [ [1,2,3],  
      [3,4,5],  
      [6,7,8]]  
m2 = [[1,0,0],  
      [0,1,0],  
      [0,0,1]]  
  
def f(x):  
    res = []  
    c = 0  
    for i in range(len(x)):  
        res += x[i][:c]  
        c += 1  
    return res  
  
def f2(x):  
    res = []  
    c = 1  
    for i in range(len(x)):  
        res += x[i][c:]  
        c += 1  
    return res  
  
print(f(m) == f2(m))  
print(f(m2) == f2(m2)) 
Аватар пользователя
Мыслитель

n = int(input())
matrix = []

for i in range(n):
row = list(map(int, input().split()))
matrix.append(row)

# Проверяем симметрию относительно главной диагонали
is_symmetric = True
for i in range(n):
for j in range(i + 1, n):
if matrix[i][j] != matrix[j][i]:
is_symmetric = False
break

if is_symmetric:
print('Yes')
else:
print('No')