IJ3 - 1097
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;
}
}
}
André Filipe @andresantosVocê não precisa usar dois laços. Muito menos o
while. Veja essa lógica usada no problema 1098, que é semelhante ao 1097.
Em resposta adanielsouza⬆:Mauricio Santana @mauriciosmdá 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"
Em resposta adanielsouza⬆:Denilson Bezerra @denilsonbezerraBom 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 = 1ej = 7; - O maior valor que essas variáveis podem ter é
i = 9ej = 15; - Existe uma mudança constante e duas mudança condicionais que são respectivamente:
j - 1independente da contagem do loop.
i + 2ej + 4se a condição dej == i + 4for 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!
- A contagem se inicia no
- VEm resposta adanielsouza⬆:Vítor Del Duca @velhodell
Excelentes dicas, ajudaram demais.