Pessoal, preciso de uma ajuda, denovo, dessa vez eu tenho uma Matriz MxN (definido pelo usuário), que eu preciso mostrar os valores de todas as diagonais, por exemplo:
Matriz:
8 3 2 5
0 1 9 1
2 7 1 0
Saída:
8
0 3
2 1 2
7 9 5
1 1
0
2
0 7
8 1 1
3 9 0
2 1
5
Alguma ideia que pode ajudar?
Detalhe: Não posso importar nenhum módulo para me ajudar nisso.
O mais próximo que cheguei foi usando list comprehension, mas só pega de uma ponta a outra…
# cima-baixo, esquerda-direita
print([m[i][i] for i in range(0, len(m))], "\n") # 8 1 1
# cima-baixo, direita-esquerda
print([m[i][~i] for i in range(0, len(m))], "\n") # 5 9 7
# baixo-cima, esquerda-direita
print([m[~i][i] for i in range(0, len(m))], "\n") # 2 1 2
# baixo-cima, direita-esquerda
print([m[~i][~i] for i in range(0, len(m))], "\n") # 0 9 3
Tirei do final desse post
Talvez você vai ter que fazer algo nesse sentido + laços for ou while para atingir “os miolos” da matriz, boa sorte!
Em se tratando de matrizes, você deve procurar por “propriedades observáveis”, as explicações são tediosas pois tem que ficar procurando por deduções e suposições em busca de padrões estes sim importantes.
Os esboço a seguir precisa de uma boa revisão, pois não considerei a explicação de fácil entendimento (itens de 1 a 5).
Não fiz as diagonais que iniciam pela base, mas ao meu ver é questão de procurar por propriedades/padrões, você pode manter a análise atual, ou poderia inverter a matriz, de forma que a última linha tomasse o lugar da primeira, a penúltima o lugar da segunda etc, mas é só uma exemplificação de que há mais de uma forma de resolver o mesmo problema.
No Exemplo do link acima. Se vc reparar numa Matriz 6x6 por Exemplo
as Diagonais sempre:
1 ) começam na primeira linha A1,1 / A1,2 / A1,3 /… A1,n
2) O numero de elementos é igual ao número da coluna. Ex para A1,3 tem 3 elementos
3) E os elementos são sempre, a partir de um Ai,j qualquer…
Exemplo Ai,j / A(i= i+1),(j = j-1) / A(i = i+2),(j = j-2) e assim por diante
4) O último i é quando i = j
5) O último j é quando j = 1
Daí é só usar If ou For depende de como vc prefere…