Java - Problema de Genialidad

 
Vista:

Problema de Genialidad

Publicado por Felipe (27 intervenciones) el 20/08/2008 18:50:43
HOla tengo un programa que divide en dos un número si es par y lo multiplica por 3 +1 si no pero no se que tiene mal en la función que hace ese procesamiento espero me ayuden

import java.util.Scanner;

public class AckermanFunctions {

public static void main(String[] args) throws Exception {
Scanner in = new Scanner(System.in);
int a, b;
int valor, y=0;
int arr[]=new int [100];
while (in.hasNext()){
a=in.nextInt();
b=in.nextInt();
if (a==0 && b==0)
break;
for (int i=a; i<=b; i++){
valor=ackerman(i);
//arr[y]=valor;
//y++;
System.out.print(valor);
}
/*for (int p=0;p<=y;p++)
arr[p]=0;

for (int k=0;k<=y;k++)
System.out.print(arr[k]);*/
}

}

public static int ackerman (int i){
int x=0;

while (i!=1){
x=x+1;
if (i%2==0){
i=i/2;
}
else{
i=i*3+1;
}

}

return x;

}

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema de Genialidad

Publicado por hadrien (25 intervenciones) el 21/08/2008 00:34:46
Hola,

me parece que ese método no corresponde a la Función de Ackermann... Aquí tienes la definición y la función en C, lenguaje que me parece que conoces:
http://es.wikipedia.org/wiki/Funci%C3%B3n_de_Ackermann

No sé qué esperas que haga tu programa, pero hace lo que pone el código, es decir:
- Lee dos enteros introducidos por teclado.
- Entra en un bucle si y sólo si a <=b
- Dentro del bucle, llama a la función akermann con el contador del bucle como parámetro
- Dentro de ackermann, va haciendo cálculos con el valor pasado y devuelve el valor x, que cuenta el número de cálculos.
- Este valor se imprime por pantalla, dentro del bucle for y, si procede, sigue con el bucle.

Ejemplo:
- Introducimos: 2 3 --> a=2, b=3
- Bucle for: i=2 --> ackermann(2)
- Ackermann: 2 /2 == 1 --> x=1 --> valor = 1
- Bucle for: i=3 --> ackermann(3)
- Ackermann:
i = 3 * 3 + 1 = 10 --> x = 1
i = 10 / 2 = 5 --> x = 2
i = 5 * 3 +1 = 16 --> x = 3
i = 16 / 2 = 8 --> x =4
i = 8 / 2 = 4 --> x = 5
i = 4 / 2 = 2 --> x=6
i = 2 / 2 = 1 --> x=7
- Bucle for: valor = 7
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema de Genialidad

Publicado por anonimo (11 intervenciones) el 27/08/2008 16:35:45
el post de mas abajo puse un posible error mire a ver si con eso se soluciona el problema.

suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar