FJ11 3.13 Exercicio 7

8 respostas
F

Boa noite pessoal,

Antes de postar eu pesquisei sobre esse exercício, mas vi que usaram 2 variáveis e eu não entendi o porque. Aparentemente o meu código funciona, exceto que ele imprime um -> a mais no final, se puderem me ensinar como tratar isso também, eu agradeço!

Enunciado:

7) (opcional) Escreva um programa que, dada uma variável x (com valor 180, por exemplo), temos um novo x de acordo com a seguinte regra:

  • se x é par, x = x / 2

  • se x é impar, x = 3 * x + 1

  • imprime x

  • O programa deve parar quando x tiver o valor ?final de 1. Por exemplo, para x = 13, a saída será: 40 -> 20 -> 10 -> 5 -> 16 -> 8� -> 4 -> 2 -> 1

Meu código:

class Numeros { public static void main(String[] args) { int x = 180; while (x > 1) { if ((x % 2) == 0) { x = x / 2; } else { x = 3 * x + 1; } System.out.print(x + "->"); } x--; } }

8 Respostas

Aleksandro

Isto ocorre pq quando o x ser igual a 2 ele entra no if e se torna 1 e por ser igual a 1 ele sai do seu laço while , para resolver isto simplesmente coloque assim :

System.out.print("->" + x);
F

Aleksandro, obrigado pela rápida resposta!

Eu tentei dessa forma, mas dai ele começa imprimindo ->, pelo menos no enunciado ele mostra “numero -> outro numero…”. Eu sei que é um detalhe minúsculo, só estou curioso.

Quanto ao código, está correto? Eu não entendi porque em outros códigos o pessoal usou duas variáveis.

Aleksandro

fggs:
Aleksandro, obrigado pela rápida resposta!

Eu tentei dessa forma, mas dai ele começa imprimindo ->, pelo menos no enunciado ele mostra “numero -> outro numero…”. Eu sei que é um detalhe minúsculo, só estou curioso.

Quanto ao código, está correto? Eu não entendi porque em outros códigos o pessoal usou duas variáveis.

Pode ser que quem tá fazendo deve estar comparando as variaveis entre si … como não vi o outro código não sei te dizer , no seu caso , por ser um exercicio acredito que o importante é entender o conceito , ele sempre entra na sua interação while e sai quando x ser maior q 1, mas antes de ele validar se x é maior que 1 , ele passa pelo system.out…e insere o 1 …

F

Após fazer o meu, eu pesquisei e achei esse tópico com os códigos, foi ai que me gerou a dúvida: http://www.guj.com.br/java/271242-exercicio-7-opcional-apostila-fj11-caelum

Consegui arrumar a impressão, mas ACHO que ficou “porco”:

class Numeros { public static void main(String[] args) { int x = 180; while (x > 1) { if ((x % 2) == 0) { x = x / 2; } else { x = 3 * x + 1; } if (x == 1) { System.out.print(x); } else { System.out.print(x + "->"); } } x--; } }

Aleksandro

fggs:
Após fazer o meu, eu pesquisei e achei esse tópico com os códigos, foi ai que me gerou a dúvida: http://www.guj.com.br/java/271242-exercicio-7-opcional-apostila-fj11-caelum

Consegui arrumar a impressão, mas ACHO que ficou “porco”:

class Numeros { public static void main(String[] args) { int x = 180; while (x > 1) { if ((x % 2) == 0) { x = x / 2; } else { x = 3 * x + 1; } if (x == 1) { System.out.print(x); } else { System.out.print(x + "->"); } } x--; } }

Você pode substituir seu system.out por este aqui …

System.out.print(x > 1 ? x + "->" : x);

Elegância no código você acaba adquirindo com o tempo não se preocupe com isto agora, aprenda os conceitos …bons estudos …

ViniGodoy

Por favor, ao postar tópicos, evite marcar os títulos com informações óbvias, tais como [Duvida], [Ajuda], [Socorro] ou [Urgente].

ViniGodoy

Só a título de curiosidade. Esse exercício é a implementação da Conjectura de Collatz (também conhecida como seqüência de Hailstones). Ela foi proposta em 1937. Já foram oferecidos diversos prêmios para quem provasse a conjectura, em valores que vão de míseros 100 dólares Australianos, até um milhão de dólares.

Até hoje, não existe prova (ou contra-prova) para a conjectura.

F

ViniGodoy, mil perdões!

Obrigado pela informação interessante! Descobri mais tarde que meu código tinha um errinho (x–; não estava sendo utilizado). Ontem passei 3 horas pra resolver o for encadeado, sei lá, estou achando que estou levando muito tempo pra resolver exercícios “simples”, clássicos, básicos, mas vamos em frente!

Mais uma vez obrigado!

Criado 25 de setembro de 2012
Ultima resposta 26 de set. de 2012
Respostas 8
Participantes 3