Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: drate en 13 de Febrero 2022, 20:05
-
Buenas tardes.
Estoy tratando de resolver el problema de las N-Reinas en Java.
Tengo una clase llamada NReinas. Y el método:
private static resolverReinas( int n){}.
Según he leído debo usar Bactrack para resolverlo pero no consigo ni declarar el array con el que trabajar y menos aún el método recursivo que necesito dentro de dicho método.
Me pueden ayudar? Muchas gracias, un saludo.
-
Desconozco ese algoritmo.
En youtube alguien lo explica, a ver si puede servirte: https://www.youtube.com/watch?v=zhTdhoyMfO4 (https://www.youtube.com/watch?v=zhTdhoyMfO4)
-
Buenas noches, me puede ayudar con el ejercicio siguiente por favor.
EJERCICIO
- Describa dos clases y tres objetos por cada clase
- Realice el siguiente ejercicio teniendo en cuenta la metodología POO
- Hacer un programa que al dar la hora (hh, mm, ss) mmuestre la hora después de 2 horas, 10 minutos y 20 segundos.
-
Lo de "describa dos clases y tres objetos por cada clase", sinceramente, no sé qué quieren indicar con eso.
Para el ejercicio que propone, lo de incrementar un tiempo, no se necesitan dos clases.
Sobre lo de incrementar el tiempo, el enunciado también resulta un poco ambiguo. Voy a interpretar que lo que se pide es leer por teclado un tiempo pidiendo las horas, luego los minutos y después los segundos.
Y mostrar ese tiempo incrementado en las cantidades indicadas.
Bueno, podemos escribir una clase que reciba por constructor las horas, minutos y segundos iniciales.
Y tenga un método que retorne el tiempo incrementado.
Incrementar el tiempo, no es simplemente sumar y ya está.
Hay que tener en cuenta que las horas no puede tener un valor igual1 o mayor de 24.
Y los minutos y segundos no pueden ser igual o mayor a 60.
Si los segundos superan el valor 60, su contador se reinicia a cero y solo suma la diferencia que hay entre ese valor y 60.
Es decir, si comenzamos con 50 segundos, y le incrementamos 20, su valor no puede ser 70.
Será 70 - 60 = 10
Y esto además implicará que hay que añadir +1 minuto al incremento previsto.
Esta podría ser la clase:
public class Tiempo {
//Tiempo inicial, valores se inician por constructor
private int horas;
private int minutos;
private int segundos;
public Tiempo(int horas, int minutos, int segundos) {
this.horas = horas;
this.minutos = minutos;
this.segundos = segundos;
}
public String getTiempoInicial() {
return String.format("%02d:%02d:%02d", horas, minutos, segundos);
}
public String getTiempoIncrementado() {
//Incrementos a aplicar
int incHoras = 2, incMinutos = 10, incSegundos = 20;
//Tiempos que se van a incrementar respecto al tiempo inicial
int horasInc, minutosInc, segundosInc;
/*
* Para incrementar sumamos los incrementos al tiempo inicial
* teniendo en cuenta los limites de cada magnitud.
* Por ejemplo, si al sumar los segundos supera o iguala el valor 60,
* implica que los segundos han de adoptar ese valor - 60 y que hay
* que incrementar 1 minuto extra.
*/
//Incrementamos segundos
segundosInc = segundos + incSegundos;
//Comprobamos límite 60 segundos
if (segundosInc >= 60) {
segundosInc -= 60; //Restamos 60
incMinutos++;//Añadimos 1 minuto al incremento
}
//Mismo proceso con los minutos
minutosInc = minutos + incMinutos;
if (minutosInc >= 60) {
minutosInc -= 60;
incHoras++;
}
//Y con horas, límite es 24
horasInc = horas + incHoras;
if (horasInc >= 24)
horasInc -= 24;
//Retornamos tiempo incrementado
return String.format("%02d:%02d:%02d", horasInc, minutosInc, segundosInc);
}
}
Podemos ponerlo a prueba con este código:
public class TestTiempo {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
System.out.print("Indica tiempo en hh: ");
int hh = teclado.nextInt();
System.out.print("Indica tiempo en mm: ");
int mm = teclado.nextInt();
System.out.print("Indica tiempo en ss: ");
int ss = teclado.nextInt();
Tiempo tmp = new Tiempo(hh,mm,ss);
System.out.println("\nTiempo inicial: " + tmp.getTiempoInicial());
System.out.println("Tiempo incrementado: " + tmp.getTiempoIncrementado());
teclado.close();
}
}
Vemos en pantalla que parece cumplir con lo que se pide:
Indica tiempo en hh: 10
Indica tiempo en mm: 40
Indica tiempo en ss: 50
Tiempo inicial: 10:40:50
Tiempo incrementado: 12:51:10