#include #include using namespace std; string intentar(int numero) { int numeroSecreto = 23; cout << "Probando " << numero << endl; if (numero == numeroSecreto) return string("ok"); else if (numero < numeroSecreto) return string("es mayor"); else return string("es menor"); } int adivinarNumero() { // En una primera fase va multiplicando por 2 hasta encontrar // el numero secreto o superarlo, empezando en 1 int numero = 1; string respuesta = intentar(numero); while (respuesta == "es mayor") { numero = numero * 2; respuesta = intentar(numero); } if (respuesta != "es menor") return numero; // Si no lo ha encontrado, en una segunda fase realiza // una busqueda binaria entre los dos ultimos numeros int limiteInferior = numero / 2 + 1; int limiteSuperior = numero - 1; while (limiteInferior < limiteSuperior) { numero = (limiteInferior + limiteSuperior) / 2; respuesta = intentar(numero); if (respuesta == "es mayor") limiteInferior = numero + 1; else if (respuesta == "es menor") limiteSuperior = numero - 1; else return numero; } return limiteInferior; } int main () { int resultado = adivinarNumero(); cout << "Resultado: " << resultado << endl; }