Explicacion Problema ACM (3n+1)

4
Nombre: Gomez Garcia Deivi Problema resuelto ACM: 3n+1 El problema dice asi: PROBLEMA Considerando el siguiente algoritmo input n print n if n = 1 then STOP if n is odd then n <- 3n + 1 else n <- n/2 GOTO 2 Teniendo la entrada 22, la siguiente secuencia de números se imprimirán 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 El ciclo termina cuando se imprime 1. Dado un numero "n" de entrada, es posible determinar el número de números impresos (incluyendo el 1). Para un "n" dado esto se llama el ciclo de longitud de "n". En el ejemplo anterior, la duración del ciclo de 22 es 16. Para cualquier par de números de i y j que son determinar la duración del ciclo máximo entre estos rangos. ENTRADA La entrada consistirá en una serie de pares de números enteros i y j, un par de enteros por línea. Todos los números enteros será inferior a 1.000.000 y mayor que 0. Usted debe procesar todos los pares de números enteros y para cada par determinar la duración del ciclo máximo sobre todos los enteros incluyendo i y j. Usted puede asumir que ninguna operación se desborda un entero de 32 bits. SALIDA

description

Ejercicio explicado ACM 3n+1

Transcript of Explicacion Problema ACM (3n+1)

Page 1: Explicacion Problema ACM (3n+1)

Nombre: Gomez Garcia Deivi

Problema resuelto ACM: 3n+1

El problema dice asi:PROBLEMA

Considerando el siguiente algoritmo

input nprint nif n = 1 then STOPif n is odd then  n <- 3n + 1else n <- n/2GOTO 2

Teniendo la entrada 22, la siguiente secuencia de números se imprimirán 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

El ciclo termina cuando se imprime 1.

Dado un numero "n" de entrada, es posible determinar el número de números impresos (incluyendo el 1). Para un "n" dado esto se llama el ciclo de longitud de "n". En el ejemplo anterior, la duración del ciclo de 22 es 16.

Para cualquier par de números de i y j que son determinar la duración del ciclo máximo entre estos rangos.

ENTRADALa entrada consistirá en una serie de pares de números enteros i y j, un par de enteros por línea. Todos los números enteros será inferior a 1.000.000 y mayor que 0.

Usted debe procesar todos los pares de números enteros y para cada par determinar la duración del ciclo máximo sobre todos los enteros incluyendo i y j.

Usted puede asumir que ninguna operación se desborda un entero de 32 bits.

SALIDAPara cada par de enteros i y j debe imprimir como salida i, j, y la duración del ciclo máximo de enteros entre e incluyendo i y j. Estos tres números deben ser separados por al menos un espacio con los tres números en una línea y con una línea de salida para cada línea de entrada. Los enteros i y j deben aparecer en la salida en el mismo orden en que aparecieron en la entrada y debe ser seguido por la duración del ciclo máximo (en la misma línea).

DESARROLLO EN JAVA.

Page 2: Explicacion Problema ACM (3n+1)

package ejercicioacm;

public class solucion { int mayor=1;

public solucion(int numero1, int numero2){ int n1=numero1; int n2=numero2; // si n1 > n2 se invierten los valores if(numero1>numero2){int tmp=numero1; numero1=numero2; numero2=tmp;} // los numeros deben estar entre 0 y 1000000 if (((numero1<=1000000) && (numero1>0))&& ((numero2<=1000000)&& (numero2>0))){ //comienza el ciclo entre n1 y n2 for(int i=numero1; i<=numero2;i++){ //obtenemos el numero total de ciclos para i int j = ciclo(i); //establecemos el mayor ciclo if(j>mayor){ mayor=j; } } //muestra la solucion en consola System.out.println("Solucion " + n1 + " " + n2 + " " + mayor); } else{ System.out.println("EL rango de datos no es valido"); } } //metodo que evalua la expresion y retorna el total del ciclo private int ciclo(int n){ //establecemos un contador e 1 int count = 1; System.out.print("Para [" +n+"] Serie= "); //comenzamos el ciclo while(true){ System.out.print(n+" "); //cuando se llegue a 1 se rompe el ciclo if(n==1){break;} if(!espar(n)){ n = (3 * n) + 1; } else{ n = n / 2; } count++; }

Page 3: Explicacion Problema ACM (3n+1)

System.out.println(" ciclos: "+ count +" "); return count; } private boolean espar(int n){ return ((n % 2) == 0); }}

package ejercicioacm;

public class EjercicioACM { public static void main(String[] args) { // TODO code application logic here new solucion(22,22); } }