No internet connection
  1. Home
  2. Exercícios do Beecrowd

Exercicio - 1478 Vetores e Matrizes

Por alzira eva cavalcanti alves @eva
    2023-11-01 15:14:50.542Z

    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:

    Resolvido no post #2, clique para visualizar
    • 5 respostas
    1. Christian Amsberg Janner @calemao
        2023-11-01 22:51:19.581Z

        O 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.

        1. Christian Amsberg Janner @calemao
            2023-11-01 22:52:36.420Z

            Explicação do Math.abs em Jaavascript
            O Math.abs em 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ê aplicar Math.abs(-5), obterá 5, e se aplicar Math.abs(5), obterá o mesmo valor 5. É ú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.

          • C
            Em resposta aeva:
            Camila Vieira @CamilaVieira
              2023-11-01 21:35:32.908Z

              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
              5
              

              A 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   4
              

              Em 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.

              1. alzira eva cavalcanti alves @eva
                  2023-11-02 11:24:26.486Z

                  Nossa Camila, agora eu consegui visualizar a lógica do código corretamente, muito obrigada 👏💓

                • A
                  Em resposta aeva:
                  Alan Eduardo da Cruz @alanEduardo
                    2023-11-01 21:48:38.179Z

                    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;