#include using namespace std; int intentar(int numero) { int opcion; cout << endl; cout << "Introduce 1 si el numero secreto es mayor que " << numero << endl; cout << "Introduce 2 si el numero secreto es menor que " << numero << endl; cout << "Introduce 3 si el numero secreto es " << numero << endl; cin >> opcion; return opcion; } int adivinarNumero() { // En una primera fase va multiplicando por 2 hasta encontrar // el numero secreto o superarlo, empezando en 1 int numero = 1; int respuesta = intentar(numero); while (respuesta == 1) { numero = numero * 2; respuesta = intentar(numero); } if (respuesta == 3) 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 == 1) limiteInferior = numero + 1; else if (respuesta == 2) limiteSuperior = numero - 1; else return numero; } return limiteInferior; } int main () { cout << "Piensa un numero secreto." << endl; int resultado = adivinarNumero(); cout << endl << "Resultado: " << resultado << endl; }