Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

614
Visualizações
Suma de los elementos diagonales en una matriz espiral en Javascript

Así que me dieron una matriz = [ 1 2 3 8 9 4 7 6 5 ] que es un recorrido en espiral de una matriz cuadrada de tamaño nx n. Lo que tenía que hacer era calcular la suma de las diagonales primaria y secundaria e imprimirla. Pude convertir esta matriz 1D en una matriz 2D de tamaño n*n y calcular la suma de ambas diagonales de esta manera:

pd: la matriz es algo como esto [[1, 2, 3], [6, 5, 8], [7, 4, 9]]

 function spDiag(n,arr){ let mat = []; let primary = 0, secondary = 0; while(arr.length) mat.push(arr.splice(0, n)); for(let i = 0; i < n; i++){ for(let j = 0; j < n; j++){ if(i === j) primary += mat[i][j]; if((i + j) === (n-1)) secondary += mat[i][j]; } } console.log(primary + secondary) console.log(JSON.stringify(mat)); } spDiag(3, [1,2,3,8,9,4,7,6,5])
Pero la tarea era formar una matriz en espiral y luego calcular la suma de las diagonales y no solo una matriz 2D y, debido a esto, mi resultado no es correcto. ¿Cómo puedo convertir esta matriz 1D en una matriz espiral?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Realmente no necesita convertir la matriz 1D en una matriz 2D, ni necesita visitar cada valor en la matriz. Las diagonales siguen un patrón sencillo, ya que la distancia índice entre 2 elementos consecutivos en una diagonal sigue un patrón.

Véase, por ejemplo, para una matriz de 7x7 cuyos índices de la secuencia espiral están en una diagonal:

 0 . . . . . 6 . 24 . . . 28 . . . 40 . 42 . . . . . 48 . . . . . 46 . 44 . . . 36 . . . 32 . 18 . . . . . 12

Los espacios entre dos índices consecutivos que están en la diagonal (en orden de índice) son: 6, 6, 6, 6, 4, 4, 4, 4, 2, 2, 2, 2. El patrón general para estos espacios es : 𝑛−1,𝑛−1,𝑛−1,𝑛−1,𝑛−3,𝑛−3,𝑛−3,𝑛−3,...etc.

Implementación

Como el tamaño de la matriz dada es el cuadrado de 𝑛, no veo por qué tendrías que pasar 𝑛 como argumento. Es información redundante.

Asi que:

 function sumDiagonals(arr) { let n = Math.sqrt(arr.length); if (n % 1) throw "Array size should be perfect square"; let sum = 0; let len = n*2 - n%2; // The number of values on diagonals for (let i = 0, j = 0; j < len; i += n - 1 - (j++ >> 2)*2) { sum += arr[i]; } return sum; } let arr = [1, 2, 3, 8, 9, 4, 7, 6, 5]; console.log(sumDiagonals(arr));

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda