Hola Buenas,
Hace poco me han propuesto un ejercicio de java que esta subido en la pagina de aceptaElReto. Os dejo el link para que podais ver el enunciado: https://www.aceptaelreto.com/problem/statement.php?id=192&cat=70
He conseguido hacerlo pero tengo un problema de tiempo de ejecución y no se como resolverlo. La ejecución no puede tardar mas de 3 segundos.
Os dejo también mi código a ver si podeis decirme alguna solución para optimizar mi código.
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
private static boolean conseguido = false;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<String> output = new ArrayList<String>();
int caso = sc.nextInt();
ArrayList<Integer> casos = new ArrayList<Integer>();
while(caso!=0) {
casos.add(caso);
caso=sc.nextInt();
}
sc.close();
for(int i = 0; i<casos.size(); i++) {
conseguido = false;
int pivote = casos.get(i);
int num = 1;
sumarCinco(pivote,num);
multiplicarTres(pivote,num);
String out;
if(conseguido) {
out = "SI\n";
}else {
out ="NO\n";
}
output.add(out);
}
for(int i = 0; i<output.size();i++) {
System.out.println(output.get(i));
}
}
public static int comparar(int pivote, int num){
if(num<pivote) {
return 1;
}else if(num == pivote) {
return 0;
}
return -1;
}
public static void sumarCinco(int pivote, int num) {
num += 5;
int resultadoComparar = comparar(pivote,num);
if(resultadoComparar==1 && !conseguido) {
sumarCinco(pivote,num);
multiplicarTres(pivote,num);
}else if(resultadoComparar==0) {
conseguido=true;
}
}
public static void multiplicarTres(int pivote,int num) {
num *= 3;
int resultadoComparar = comparar(pivote,num);
if(resultadoComparar==1 && !conseguido) {
sumarCinco(pivote,num);
multiplicarTres(pivote,num);
}else if(resultadoComparar==0) {
conseguido=true;
}
}
}