boa tarde pessoa, estou com problema para conseguir desenvolver a lógica do código dessa questão : https://www.beecrowd.com.br/judge/pt/problems/view/1478
let ordem = parseInt(lines.shift());
while(ordem !== 0) {
let matriz = new Array(ordem);
for (let i = 0; i < ordem ; i++){
matriz[i] = new Array(ordem);
for (let j = 0; j < ordem ; j++){
matriz[i][j] = Math.abs(i, j) + 1;
}
}
for (let i = 0; i < ordem; i++){
let linha = "";
for (let j = 0; j < ordem; j++){
const valor = matriz[i][j];
linha += `${valor < 10 ? " " : ""}${valor}`;
if(j < ordem - 1){
linha += " ";
}
}
console.log(linha);
}
ordem = parseInt(lines.shift());
if(ordem !== 0){
console.log("");
}
}
A saida do código está a seguinte:
Christian Amsberg Janner @calemaoO código contém um equívoco na linha que tenta calcular os elementos da matriz. O uso de Math.abs(i, j) não é a abordagem adequada para calcular os valores da matriz. Em vez disso, é necessário empregar a fórmula correta para preencher a matriz com os valores apropriados.
A principal correção reside na fórmula empregada para calcular os valores da matriz: matriz[i][j] = Math.abs(i - j) + 1;. Essa fórmula resultará na matriz correta, contendo os valores desejados. Assegure-se de substituir a variável 'lines' pelos valores de entrada apropriados a fim de testar o código.
Christian Amsberg Janner @calemaoExplicação do Math.abs em Jaavascript
OMath.absem JavaScript é uma função que retorna o valor absoluto de um número, ou seja, transforma qualquer número em um valor positivo, ignorando seu sinal. Por exemplo, se você aplicarMath.abs(-5), obterá5, e se aplicarMath.abs(5), obterá o mesmo valor5. É útil quando você deseja garantir que um número seja sempre tratado como positivo, independentemente de seu sinal, tornando operações matemáticas mais previsíveis e fáceis de lidar.
- CEm resposta aeva⬆:Camila Vieira @CamilaVieira
Pelo visto não está com o espaçamento correto no começo da linha. Também tive problema com esse exercício e só consegui resolver com o método .padStart(). Dá uma lida nesse link aqui pra ver como ele funciona e tenta implementar na sua solução: https://www.w3schools.com/jsref/jsref_string_padstart.asp.
Além disso a lógica que você montou pra preencher as matrizes não está correta. Se você observar, vai ver que a matriz é formada por números em ordem crescente, e esses números variam de acordo com o tamanho da matriz. Se a matriz for do tamanho 5, os números serão de 1 a 5.
Uma lógica que eu usei foi preencher por linha e coluna, se você observar vai ver que a primeira linha e primeira coluna tem todos os números em ordem crescente, começando pela posição [0][0].
1 2 3 4 5 2 3 4 5A segunda linha e segunda coluna tem todos os números menos o último.
1 2 3 4 5 2 1 2 3 4 3 2 4 3 5 4Em cada loop fui preenchendo as linhas e colunas mais internas.
Estou tentando ajudar sem trazer solução em código (pois acho que dar código pronto não ajuda de fato). Espero que tenha clareado um pouco. Qualquer coisa só chamar.
alzira eva cavalcanti alves @evaNossa Camila, agora eu consegui visualizar a lógica do código corretamente, muito obrigada 👏💓
- AEm resposta aeva⬆:Alan Eduardo da Cruz @alanEduardo
Olá, tente fazer essas modificações nessa parte do codigo e veja se da certo.
codigo anterior: for (let j = 0; j < ordem ; j++){ matriz[i][j] = Math.abs(i, j) + 1; codigo alterado: for (let j = 0; j < ordem; j++) { matriz[i][j] = Math.abs(i - j) + 1;