propongo una sfida ai merd del forum
dopo aver iniziato , spinto dalla capata di emulare questo gioco, a leggiucchiare qualcosa di approfondito sugli alberi di decisione (nun cio dicit o raggiunier che questo sito non usa la magia 

 ) mi è venuta la barbara idea di inventarmi (in realtà non so se me la sto inventando io o già esiste) un implementazione basata su una matrice
visto che siete bravi, lascio a voi il piacere di capire come funziona l'algoritmo.....mi sfastereo di spiegarlo  
Spoiler#include <iostream>
using namespace std;
int main ()
{
   //MAT: conoscenza dell'indovino
   //RIGHE personaggi
   //COLONNE risposte corrette
   //matrice riempita a casaccio
   int mat[5][5] =
   {
         { 1 , 0 , 1 , 0 , 1 } ,
         { 0 , 1 , 0 , 1 , 0 } ,
         { 1 , 1 , 0 , 1 , 1 } ,
         { 0 , 0 , 1 , 0 , 0 } ,
         { 1 , 0 , 1 , 1 , 1 }
   };
   int answer;
   //personaggi da scartare
   bool row_state[5] = {true , true , true , true , true};
   //-----------------------------ALGORITMO--------------------------------
   for (int j = 0 ; j < 5 ; j++)
   {
      cout << "domanda numero " << j << ": ";
      cin >> answer;
      for (int i = 0 ; i < 5 ; i++)
      {
         if (row_state)
         {
            if (answer != mat[j])
            {
               row_state = false;
            }
         }
      }
   }
   //------------------------------------------------------------------------
   bool found_answer = false;
   for (int i = 0 ; i < 5 ; i++)
   {
      if (row_state)
      {
         cout << "stavi pensando a " << i << "?\n";
         found_answer = true;
      }
   }
   if (!found_answer)
   {
      cout << "mi arrendo!!!\n";
   }
   return 0;
}
ovviamente è un implementazione ancora molto ma molto pane e puparuoli, ma credo che si possano fare su cose interessanti. chi avesse consigli e suggerimenti, parlasse pure