logo

Problema 3N+1 en Java

El problema 3N+1 es un problema matemático abstracto que es una conjetura (aún no probada). También se le conoce como Problema de colatz. En esta sección, discutiremos el problema 3N+1 junto con su programa Java.

La tarea es escribir un programa Java que lea un número entero positivo del usuario e imprima el 3N+1 secuencia a partir de ese número entero. El programa también debe contar e imprimir el número de términos en la secuencia.

Encontrar la secuencia 3N+1

Dado un número entero positivo, N, defina la secuencia 3N+1 a partir de N de la siguiente manera:

  • Si N es un número par, entonces divida N entre dos.
  • Si N es un número impar, entonces multiplica N por 3 y suma 1.
  • Continúe generando números de esta manera hasta que N sea igual a 1.

Matemáticamente, podemos definir el problema 3N+1 de la siguiente manera:

tabla hash java
Problema 3N+1 en Java

Entendamos el planteamiento del problema a través de un ejemplo.

Suponer, norte = 3 , que es un número impar. De acuerdo con la regla anterior, multiplicamos N por 3 y sumamos 1, obtenemos N = 3*3+1 = 10. Por lo tanto, N se convierte en un número par. Ahora, divida N entre 2. Da N = 10/2 = 5. Continúe el proceso hasta que N sea igual a 1. Por lo tanto, la secuencia 3N+1 será 3, 10, 5, 16, 8, 4, 2, 1 .

pseudocódigo java

Algoritmo de problemas 3N+1

Para calcular el siguiente término, el programa debe tomar diferentes acciones dependiendo de si norte es incluso o extraño . Para lo mismo, requerimos una declaración if que decida que N es par o impar.

El único problema que queda es el de contar. Contar significa que comenzamos con cero, y cada vez que tenemos algo que contar, sumamos 1. Necesitamos una variable (digamos contar) para contar.

Todavía tenemos que preocuparnos por el primer paso. ¿Cómo podemos obtener un número entero positivo del usuario? Si simplemente leemos un número, es posible que el usuario escriba un número negativo o cero. Si seguimos lo que sucede cuando el valor de N es negativo o cero, veremos que el programa continuará para siempre, ya que el valor de N nunca será igual a 1, lo cual no es compatible.

En este caso, el problema probablemente no sea gran cosa, pero en general deberíamos intentar escribir programas que sean infalibles. Una forma de solucionar este problema es seguir leyendo números hasta que el usuario escriba un número positivo.

indio rekha
 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; 

El primer ciclo while finalizará sólo cuando N sea un número positivo, como se requiere. Si N no es positivo, solicite al usuario que ingrese otro valor. El problema surge si el segundo número ingresado por el usuario tampoco es positivo. La sentencia if sólo se ejecuta una vez, por lo que el segundo número de entrada nunca se prueba.

Con el ciclo while, después de ingresar el segundo número, la computadora regresa al comienzo del ciclo y prueba si el segundo número es positivo. De lo contrario, solicita al usuario un tercer número y continuará solicitando números hasta que el usuario ingrese una entrada aceptable.

Implementemos el algoritmo anterior en un programa Java.

Programa Java 3n+1 Problema

ThreeNPlusOneProblem.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></=>