Я погуглил "20q код" и нашел это: http://mosaic.cnfolio.com/B142LCW2008A197
Эта версия предназначена только для животных, но фактические 20 вопросов, вероятно, имеют аналогичный алгоритм.
Вот краткий обзор кода, который я связал:
Есть несколько различных ответов, жестко запрограммированных в программе. Затем им присваивается несколько атрибутов TRUE или 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"
...
Как видите, пчела не млекопитающая, а летает и т. Д.
Для каждой группы есть массив:
int mammals[ TOTAL_ANIMALS ] = { 0 };
int flying_animals[ TOTAL_ANIMALS ] = { 0 };
int water_animals[ TOTAL_ANIMALS ] = { 0 };
...
Когда задают каждый вопрос:
askUserQuestion( guesses, "\nQuestion %d: Is your animal a mammal? \n", mammals );
Программа просматривает определение соответствующей категории и отслеживает, какое животное наиболее вероятно является тем, о котором вы думаете, на основе значений ИСТИНА или ЛОЖЬ и вашего предполагаемого ответа «Да» или «Нет» на вопрос.
Это сделано в:
void askUserQuestion( int guessNumber, char* question, int* animalData );