Geekedu is an expert in Coding and Math learning. Our goal is to inspire and empower youth to use their knowledge of technology to become the influencers, inventors and innovators of the future.

Ask your friend 5 number questions to find out which day of month is his/her birthday. Each question asks whether his birthday is one of the five numbers.

Birthday is the sum of the first number of each set that appears on this day. For example, birthday is 19th, then it will appear in sets 1, 2 and 5. The first numbers of the three sets are 1, 2 and 16 respectively. Their sum is 19.

The implementation in Java is:

Import the Java.util.Scanner;
publicclassGussBirthday{
publicstaticvoidmain(String []args {
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 230 31";
int day = 0;
// Create Scanner
Scanner input = new Scanner(System.in);
// Prompt the user to answer questions
System.out.println("Is your birthday in Set1?\n");
System.out.println(set1);
System.out.println("\nEnter 0 for No and 1 for Yes: ");
int answer = input.nextInt();
if (answer == 1)
day += 1;
// Prompt the user to answer questions
System.out.println("Is your birthday in Set2?\n");
System.out.println(set2);
System.out.println("\nEnter 0 for No and 1 for Yes: ");
answer = input.nextInt();
if (answer == 1)
day += 2;
// Prompt the user to answer questions
System.out.println("Is your birthday in Set3?\n");
System.out.println(set3);
System.out.println("\nEnter 0 for No and 1 for Yes: ");
answer = input.nextInt();
if (answer == 1)
day += 4;
// Prompt the user to answer questions
System.out.println("Is your birthday in Set4?\n");
System.out.println(set4);
System.out.println("\nEnter 0 for No and 1 for Yes: ");
answer = input.nextInt();
if (answer == 1)
day += 8;
// Prompt the user to answer questions
System.out.println("Is your birthday in Set5?\n");
System.out.println(set5);
System.out.println("\nEnter 0 for No and 1 for Yes: ");
answer = input.nextInt();
if (answer == 1)
day += 16;
System.out.println("\nYour birthday is " + day + "!");
}
}

Output:

Is your birthday in Set1?
135791113151719212325272931
Enter 0for No and 1for Yes:
1
Is your birthday in Set2?
2367101114151819222326273031
Enter 0for No and 1for Yes:
1
Is your birthday in Set3?
4567121314152021222328293031
Enter 0for No and 1for Yes:
0
Is your birthday in Set4?
891011121314152425262728293031
Enter 0for No and 1for Yes:
0
Is your birthday in Set5?
161718192021222324252627282923031
Enter 0for No and 1for Yes:
1
Your birthday is 19!

This game is very easy to program. You may be curious to know how to create this game. In fact, the mathematical knowledge behind this game is very simple. These numbers are not randomly grouped together. The way they are placed in the five sets is well thought out.

The first numbers of these five sets are 1, 2, 4, 8, and 16, respectively, which correspond to binary numbers 1、10、100、1000and 10000. The decimal numbers from 1 to 31 can be represented by up to five binary numbers, as shown in Figure. It is assumed that b5b4b3b2b1, so b5b4b3b2b1=b50000 + b4000 + b300 + b20+b1.

as the picture shows. If the binary number of a certain day is an integer 1 in the b position, then the number should appear in Set.

For example:

the binary number 19 is 10011, so it should appear in set 1, set 2, and set 5. It is a binary number 1+10+10000=10011or a decimal number 1+2+16=19.

The binary number 31 is 11111, so it will appear in set 1, set 2, set 3, set 4, and set 5. It is a binary number 1+10+100+1000+10000=11111, or a decimal number 1+2+4+8+16=31.