Как работает угадывание дня рождения

Я читаю пример из книги 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, суммируя все первые записи в наборе, если его день рождения в наборе

Я прочитал объяснение и не мог его понять, поэтому может ли кто-нибудь объяснить, как это было сделано и как эти наборы размещены?

В опубликованном вами коде определены пять переменных String, которые состоят из конкатенированных литералов. Здесь нет логики.

f1sh 11.01.2023 00:15

Код и алгоритм можно найти по адресу liveexample.pearsoncmg.com/html/GuessBirthday.html. Обратите внимание, что есть 5 вопросов «да/нет». Это дает 32 различные возможности.

Old Dog Programmer 11.01.2023 00:34

Версия на Python находится по адресу github.com/amandeepthakur/guessingBirthday/blob/master/…

Queeg 11.01.2023 00:52
Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
Лучшая компания по разработке спортивных приложений
Лучшая компания по разработке спортивных приложений
Ищете лучшую компанию по разработке спортивных приложений? Этот список, несомненно, облегчит вашу работу!
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Что такое Java 8 Streams API? Java 8 Stream API
Деревья поиска (Алгоритм4 Заметки к учебнику)
Деревья поиска (Алгоритм4 Заметки к учебнику)
(1) Двоичные деревья поиска: среднее lgN, наихудшее N для вставки и поиска.
2
3
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Алгоритм основан на записи двоичных чисел.

  • Спрашивая: «Содержится ли число в первом наборе?» он отображает все числа, у которых установлен бит 2^0. Обратите внимание на ответ.
  • Спрашивая: «Содержится ли число во втором наборе?» он отображает все числа с установленным битом 2^1. Обратите внимание на ответ.
  • Спрашивая: «Содержится ли число в третьем наборе?» он отображает все числа, для которых установлен бит 2^2. Обратите внимание на ответ.
  • Спрашивая: «Содержится ли число в четвертом наборе?» он отображает все числа, для которых установлен бит 2^3. Обратите внимание на ответ.
  • Спрашивая: «Содержится ли число в пятом наборе?» он отображает все числа, для которых установлен бит 2^4. Обратите внимание на ответ.

Теперь у вас есть ответы, указывающие, какие биты установлены в двоичном числе дня рождения. Просто преобразуйте двоичную запись в десятичную, и это можно сделать, просто просуммировав первое значение набора, если ответ был «да».

Если вам все еще трудно понять, приложите усилия и запишите все числа из набора в десятичном и двоичном формате и сравните закономерности.

Другие вопросы по теме