logo

Problema 3N+1 em Java

O Problema 3N+1 é um problema matemático abstrato que é uma conjectura (ainda não comprovada). Também é conhecido como Problema de Collatz. Nesta seção, discutiremos o problema 3N+1 junto com seu programa Java.

A tarefa é escrever um programa Java que leia um número inteiro positivo do usuário e imprima o 3N+1 sequência a partir desse número inteiro. O programa também deve contar e imprimir o número de termos na sequência.

ipconfig para Ubuntu

Encontrando a sequência 3N+1

Dado um número inteiro positivo, N, defina a sequência 3N+1 começando em N da seguinte forma:

  • Se N for um número par, divida N por dois.
  • Se N for um número ímpar, multiplique N por 3 e some 1.
  • Continue a gerar números desta forma até que N se torne igual a 1.

Matematicamente, podemos definir o problema 3N+1 da seguinte forma:

Problema 3N+1 em Java

Vamos entender a definição do problema por meio de um exemplo.

Suponha, N = 3 , que é um número ímpar. De acordo com a regra acima, multiplique N por 3 e adicione 1, obtemos N = 3*3+1 = 10. Portanto, N torna-se um número par. Agora, divida N por 2. Dá N = 10/2 = 5. Continue o processo até que N se torne igual a 1. Portanto, a sequência 3N+1 será 3, 10, 5, 16, 8, 4, 2, 1 .

processo android acore

Algoritmo de Problema 3N+1

Para calcular o próximo termo, o programa deve tomar ações diferentes dependendo se N é até ou chance . Para o mesmo, exigimos uma instrução if que decidirá que N é par ou ímpar.

O único problema que permanece é a contagem. Contar significa que começamos com zero e sempre que temos algo para contar, adicionamos 1. Precisamos de uma variável (digamos, contar) para fazer a contagem.

Ainda temos que nos preocupar com o primeiro passo. Como podemos obter um número inteiro positivo do usuário? Se apenas lermos um número, é possível que o usuário digite um número negativo ou zero. Se seguirmos o que acontece quando o valor de N é negativo ou zero, veremos que o programa continuará para sempre, pois o valor de N nunca será igual a 1, o que não é compatível.

Neste caso, o problema provavelmente não é grande coisa, mas em geral deveríamos tentar escrever programas que sejam infalíveis. Uma maneira de corrigir isso é continuar lendo números até que o usuário digite um número positivo.

 Read a Positive integer N from the user while N is not positive: Print an error message; Read another value for N; Let count = 0; while N is not 1: if N is even: Compute N = N/2; else Compute N = 3 * N + 1; Output N; Add 1 to count; Output the count; 

O primeiro loop while terminará somente quando N for um número positivo, conforme necessário. Se N não for positivo, peça ao usuário para inserir outro valor. O problema surge se o segundo número inserido pelo usuário também for não positivo. A instrução if é executada apenas uma vez, portanto o segundo número de entrada nunca é testado.

Com o loop while, após a entrada do segundo número, o computador volta ao início do loop e testa se o segundo número é positivo. Caso contrário, ele solicita um terceiro número ao usuário e continuará solicitando números até que o usuário insira uma entrada aceitável.

opa conceitos

Vamos implementar o algoritmo acima em um programa Java.

Programa Java com problema 3n+1

TrêsNPlusOneProblem.java

 import java.util.Scanner; public class ThreeNPlusOneProblem { public static void main(String args[]) { //variable that denotes the starting point of the sequence int N; //variable to count the number of terms int count; Scanner sc=new Scanner(System.in); System.out.print(&apos;Enter the starting point for the sequence: &apos;); //reads an integer from the user N=sc.nextInt(); while (N <= 0 1 2="=" 0) { system.out.println('the starting point must be positive. please re-enter the number: '); n="sc.nextInt();" } count="0;" executes when is greater than while (n !="1)" if % 2; an odd number else * + 1; system.out.print(n '	'); increments variable by system.out.println(); system.out.println('there are '+count+' terms in sequence.'); end of main() class < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/27/3n-1-problem-java-2.webp" alt="3N+1 Problem in Java"> <hr></=>