通过在5组数里选择有没有你生日所在的那一天,然后就猜出你的生日是几号。
为什么刚好是5个问题,原来一个月最多31天,5个问题回答是和否最多2^5=32种情况。
这5组数据是根据下面规律写出的:
第1组16个数表示的就是二进制第五位是1的数字(10000)
第2组16个数表示的就是二进制第四位是1的数字(01000)
第3组16个数表示的就是二进制第三位是1的数字(00100)
第4组16个数表示的就是二进制第二位是1的数字(00010)
第5组16个数表示的就是二进制最低位是1的数字(00001)
如果第一组有,就+16
如果第二组有,就+8
如果第三组有,就+4
如果第四组有,就+2
如果第五组有,就+1
累计的结果就是你的出生日。
本题Python代码如下:
set1 = "1\t3\t5\t7\n" \
"9\t11\t13\t15\n" \
"17\t19\t21\t23\n" \
"25\t27\t29\t31\n"
set2 = "2\t3\t6\t7\n" \
"10\t11\t14\t15\n" \
"18\t19\t22\t23\n" \
"26\t27\t30\t31\n"
set3 = "4\t5\t6\t7\n" \
"12\t13\t14\t15\n" \
"20\t21\t22\t23\n" \
"28\t29\t30\t31\n"
set4 = "8\t9\t10\t11\n" \
"12\t13\t14\t15\n" \
"24\t25\t26\t27\n" \
"28\t29\t30\t31\n"
set5 = "16\t17\t18\t19\n" \
"20\t21\t22\t23\n" \
"24\t25\t26\t27\n" \
"28\t29\t30\t31\n"
day = 0
print(set1)
chioce =input("您的生日生日是否在set1中,在输入y, 不在输入n :" )
if chioce == "y" :
day += 1
print(set2)
chioce =input("您的生日生日是否在set2中 : 在输入y, 不在输入n" )
if chioce == "y" :
day += 2
print(set3)
chioce =input("您的生日生日是否在set3中 : 在输入y, 不在输入n" )
if chioce == "y" :
day += 4
print(set4)
chioce =input("您的生日生日是否在set4中 : 在输入y, 不在输入n" )
if chioce == "y" :
day += 8
print(set5)
chioce =input("您的生日生日是否在set5中 : 在输入y, 不在输入n" )
if chioce == "y" :
day += 16
print("您的生日为 :%s " %(day))