可以通过询问朋友5个问题,找到他出生在一个月的哪一天。每个问题都询问生日是否是5个数字集合中的一个。
集合一: 集合二: 集合三:
1 3 5 7 2 3 6 7 4 5 6 7
9 11 13 15 10 11 14 15 12 13 14 15
17 19 21 23 18 19 22 23 20 21 22 23
25 27 29 31 26 27 30 31 28 29 30 31
集合四: 集合五:
8 9 10 11 16 17 18 19
12 13 14 15 20 21 22 23
24 25 26 27 24 25 26 27
28 29 30 31 28 29 30 31
生日是出现这一天的每个集合的第一个数字的和。
该题利用的是二进制算法,每个月最多31天,而每一天都可用一个小于或等于五位的二进制数表示,每个集合代表的则是二进制的位数,每个集合的第一个数代表的分别是二进制的1、10、100、1000、10000,故该算法可行。