Problema de lógica em C

2 respostas
Mariana.Vecci

Oiii gente! to tentando fazer um programa que adivinhe o número que a pessoa está pensando, isto em C, utilizando a pesquisa binária que vai dividindo por 2, mas as vezes dá uma diferença de -1 na resposta rs rs
Outra coisa, tem como eu diminuir o número de perguntas para advinhar? pois existe a chance de o número ser o primeiro, por exemplo: eu escolhe 500 como número e o programa perguna se é menor, e como não é ele vai aumentando.

#include <stdio.h>
#include <conio.h>

int main (){
    printf("Advinho!\n");
    printf("Escolha um numero entre 1 e 1000.\n");
    printf("Tentarei adivinhar o numero em 10 perguntas:\n");
    
    int perguntas = 1;
    int esq = 1;
    int dir = 1000;
    int centro;
    char resposta;
   
   while (esq < dir)
   {
      centro = (esq + dir)/2;
        printf("\n%d O numero eh menor do que %d?",perguntas++,centro);
        resposta = getch();
        
         if (resposta == 's')
             dir = centro - 1;
         else 
             esq = centro + 1;
   }   
    printf("\nNumero:%d",centro);
    getch();
}

Obrigadaaa!

2 Respostas

ViniGodoy

Na verdade, ele não adivinha como o Gênio do Akinator faz.

Você deve sempre perguntar se o número do centro é o número correto. Caso contrário, vai ser difícil ele descobrir qual número o sujeito pensou. A condição esq < dir ocorre quando o número que ele pensou não estiver entre os 1000. Você poderia colocar nessa condição uma frase como "Ei, pensar um número que não esteja entre 1 e 1.000 não vale!".

ViniGodoy

Pensando bem, se assumirmos que o sujeito sempre irá responder um número dentro do intervalo, sua lógica está quase certa. Entretanto, o número correto será aquele antes dele dar a última resposta.

Criado 3 de maio de 2011
Ultima resposta 3 de mai. de 2011
Respostas 2
Participantes 2