Я читаю пример из книги Y. Daniel Liang "Введение в программирование на Java". ** интересно, как этот алгоритм работает за кулисами **
String set1 =
" 1 3 5 7\n" +
" 9 11 13 15\n" +
" 17 19 21 23\n" +
" 25 27 29 31";
String set2 =
" 2 3 6 7\n" +
" 10 11 14 15\n" +
" 18 19 22 23\n" +
" 26 27 30 31";
String set3 =
" 4 5 6 7\n" +
" 12 13 14 15\n" +
" 20 21 22 23\n" +
" 28 29 30 31";
String set4 =
" 8 9 10 11\n" +
" 12 13 14 15\n" +
" 24 25 26 27\n" +
" 28 29 30 31";
String set5 =
" 16 17 18 19\n" +
" 20 21 22 23\n" +
" 24 25 26 27\n" +
" 28 29 30 31";
Он отображает 5 наборов, и если его день рождения в этом наборе, он добавляет первое число в строку, если не игнорирует этот набор и продолжает второй набор, пока не достигнет набора5, суммируя все первые записи в наборе, если его день рождения в наборе
Я прочитал объяснение и не мог его понять, поэтому может ли кто-нибудь объяснить, как это было сделано и как эти наборы размещены?
Код и алгоритм можно найти по адресу liveexample.pearsoncmg.com/html/GuessBirthday.html. Обратите внимание, что есть 5 вопросов «да/нет». Это дает 32 различные возможности.
Версия на Python находится по адресу github.com/amandeepthakur/guessingBirthday/blob/master/…
Алгоритм основан на записи двоичных чисел.
Теперь у вас есть ответы, указывающие, какие биты установлены в двоичном числе дня рождения. Просто преобразуйте двоичную запись в десятичную, и это можно сделать, просто просуммировав первое значение набора, если ответ был «да».
Если вам все еще трудно понять, приложите усилия и запишите все числа из набора в десятичном и двоичном формате и сравните закономерности.
В опубликованном вами коде определены пять переменных String, которые состоят из конкатенированных литералов. Здесь нет логики.