1
resposta

Trocar a diagaonal primária e a diagonal secundária de uma matriz

Seja a matriz abaixo forma por uma lista de listas:

matriz = [[4, 24, 11, 30, 12],
         [1, 2, 1, 13, 12],
         [4, 5, 24, 9, 23],
         [5, 26, 17, 29, 6],
         [20, 12, 21, 30, 9]]

O que eu fiz:

for i in range(n):
    for j in range(m):
        if i == j: #diagonal principal
            for x in range(n):
                for y in range(m):
                    if x + y == m - 1:
                        if x==y:# i!=j para nao mover o elemento comum as 2 diag
                            break
                        else:
                            matriz[i][j], matriz[x][y] =  matriz[x][y], matriz[i][j]
print(matriz)

Saída:

[[20, 24, 11, 30, 9],
 [1, 26, 1, 29, 12],
 [4, 5, 13, 9, 23],
 [5, 24, 17, 12, 6],
 [2, 12, 21, 30, 4]]   

Fiquei com a dúvida: Inicialmente o número 24 era um elemento comum as duas diagonais (Primária e secundária): ele não deveria permanecer na mesma posição? Alguma sugestão?

1 resposta

Oii Edson, tudo bem?

Matematicamente falando, como temos um valor comum nas duas diagonais (24), ele deverá permanecer no mesmo lugar. Outro ponto a salientar é que teremos diagonal principal e secundária apenas em matrizes quadradas.

Quanto ao problema em si da troca de diagonais, recomendo que leia o artigo abaixo, onde ensina passo a passo e em diversas linguagens como obter esse resultado:

O artigo está em inglês, mas caso tenha dificuldades com o idioma, recomendo que utilize o tradutor do navegador.

Uma curiosidade, é que tenho percebido pelo fórum que você tem se desafiado bastante em relação a desafios de programação, se me permite, uma dica é realizar buscas em inglês, pois, terá um leque maior de possibilidades e além disso, muitas das documentações das bibliotecas estarão na língua estrangeira.

Temos dois cursos aqui na Alura que tratam de problemas mais desafiadores e complexos relacionados a maratona de programação:

Os cursos não são na linguagem Python, mas sim na linguagem C, porém, irão aprimorar toda sua lógica para resolução de problemas, incluindo problemas complexos.

Qualquer dúvida, fico à disposição.

Abraços e bons estudos

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!