No internet connection
  1. Home
  2. Dúvidas Gerais

IJ3 - 1097

Por Daniel Souza @danielsouza
    2022-12-10 01:12:19.175Z

    Boa noite pessoal, espero que todos estejam bem!
    Consegui resolver o exercício 1097, mas eu sinto que o código não está da melhor forma, em outras palavras: o código está feio.

    O que fizeram de diferente e qual dica daria para melhorar e deixá-lo mais limpo?

    1097 :

    Meu código :

    using System;
    public class Program
    {
        public static void Main(string[] args)
        {
            int i = 1;
            while (i < 10)
            {
    
                int a = 6 + i;
                for(int j=a; j >=i+4;j -=1)
                {
                    Console.WriteLine($"I={i} J={j}");
                }
                
                i += 2;
            }
        }
    }
    
    • 4 respostas
    1. André Filipe @andresantos
        2022-12-10 13:31:44.056Z

        Você não precisa usar dois laços. Muito menos o while. Veja essa lógica usada no problema 1098, que é semelhante ao 1097.

        1. Em resposta adanielsouza:
          Mauricio Santana @mauriciosm
            2022-12-10 03:39:51.515Z

            dá pra deixar com dois for, ou dois while, ou mesclados, no fim sempre vai percorrer dois laços. Ou um laço usando duas variáveis de uma vez separados por vírgula tipo for(i=0,j=0;condição dos dois, incremento dos dois), essa acho que fica mais "bonita"

            1. Em resposta adanielsouza:
              Denilson Bezerra @denilsonbezerra
                2022-12-10 12:34:32.975Z2022-12-10 15:54:05.441Z

                Bom dia, acho que não tem muito o que "limpar" no seu código, fiz usando um for que verifica os 2 valores porque eu achei que fazia mais sentido.
                Vou explicar melhor minha forma de pensar na lógica junto com o problema e meu código:

                Output do Beecrowd:

                Analisando por um tempo o output que o Beecrowd nos dá de exemplo, pude perceber 3 condições:

                • A contagem se inicia no i = 1 e j = 7;
                • O maior valor que essas variáveis podem ter é i = 9 e j = 15;
                • Existe uma mudança constante e duas mudança condicionais que são respectivamente:
                  j - 1 independente da contagem do loop.
                  i + 2 e j + 4 se a condição de j == i + 4 for verdadeira.

                Construção do meu código

                Sabendo disso, esse foi o código que pude construir:

                using System;
                
                class URI {
                
                    static void Main(string[] args) {
                         
                        // na linha abaixo, pude expressas 2 das 3 condições que são,: início da contagem e maior valor possível
                        for (int i = 1, j = 7; i <= 9 && j <= 15; j--) { // também pude expressar a mudança constante: j - 1
                
                            Console.WriteLine($"I={i} J={j}");
                
                            // dentro do loop criei o if para expressar a mudança condicional, ou seja, quando j é igual a i + 4
                            if (j == i + 4) { 
                                i += 2; // aqui faz o i + 2 como dito na análise do output.
                                j += 5; // na análise eu disse que a mudança é j + 4, mas como o loop for faz j - 1 no fim de 
                                           cada loop, então a operação se torna (j + 5) - 1 = j + 4.
                            }
                        }
                    }
                }
                

                Espera que tenha compreendido o que tentei explicar, bons estudos!

                1. V
                  Em resposta adanielsouza:
                  Vítor Del Duca @velhodell
                    2023-11-05 12:48:37.812Z

                    Excelentes dicas, ajudaram demais.