Ho cercato su Google "codice 20q" e ho trovato questo: http://mosaic.cnfolio.com/B142LCW2008A197
Questa versione è solo per animali, ma le attuali 20 Domande probabilmente hanno un algoritmo simile.
Ecco una rapida panoramica del codice che ho collegato:
Ci sono molte risposte diverse codificate nel programma. A loro vengono quindi assegnati diversi attributi TRUE o FALSE:
#define ANIMALS_LIST "daddylonglegs bee penguin eagle giraffe octopus tiger elephant jellyfish bull \nparrot dolphin python crocodile cat leopard monkey zebra sheep rat \nowl spider frog polarbear snail tortoise rabbit salmon rhino fox"
#define MAMMALS "0 0 0 0 1 0 1 1 0 1 0 1 0 0 1 1 1 1 1 1 0 0 0 1 0 0 1 0 1 1"
#define FLYING_ANIMALS "1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
#define WATER_ANIMALS "0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 0"
#define BEAK "0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0"
...
Come vedi un'ape non è un mammifero ma vola, ecc.
C'è un array per ogni gruppo:
int mammals[ TOTAL_ANIMALS ] = { 0 };
int flying_animals[ TOTAL_ANIMALS ] = { 0 };
int water_animals[ TOTAL_ANIMALS ] = { 0 };
...
Quando viene posta ogni domanda:
askUserQuestion( guesses, "\nQuestion %d: Is your animal a mammal? \n", mammals );
Il programma esamina la definizione della categoria appropriata e tiene traccia di quale animale è probabilmente quello a cui stai pensando in base ai valori VERO o FALSO e alla risposta Sì o No inserita alla domanda.
Questo viene fatto in:
void askUserQuestion( int guessNumber, char* question, int* animalData );