首先,我们需要了解一些进制相关的知识。一般生活中我们使用的都是十进制数,十进制数是指由0~9
组成的数字,而二进制就是由0~1
组成的数字。
接下来,我们需要了解一些进制转换的知识。比如十进制数2可以转换成二进制数10(1*2^1 + 0*2^0 = 1*2 + 0*1 = 2
)。
1~31日十进制数最多用5位的二进制数即可表示(2^5 = 32 > 31
)。
十进制 | 二进制 |
---|---|
1 | 00001 |
2 | 00010 |
3 | 00011 |
... | ... |
19 | 10011 |
... | ... |
31 | 11111 |
因此我们可以将每个十进制数对应二进制数划分成5个部分,即二进数表示为b5b4b3b2b1
。
我们可以画5张表格,如果某个二进制数的bk位为1,那么该数就画在表格k中。比如3用二进制表示是00011
,那么3就应该出现在表格1和表格2中,而表格3、4、5中没有3。
当我们选择每张表格中有或无我们想的数字时,相当于告诉算命先生b5b4b3b2b1
,即00011
。当算命先生拿到完整的二进制数后,将其转换成十进制数,即可得到答案3。
原理和算日期一样,我们仅需将百家姓按顺序变成1~503
个数字,2^9 > 503,所以我们需要9张表格才能算出姓氏。最后我们算出的数字转换成对应的姓氏即可得到答案。
表格1
1 | 3 | 5 | 7 |
---|---|---|---|
9 | 11 | 13 | 15 |
17 | 19 | 21 | 23 |
25 | 27 | 29 | 31 |
表格2
2 | 3 | 6 | 7 |
---|---|---|---|
10 | 11 | 14 | 15 |
18 | 19 | 22 | 23 |
26 | 27 | 30 | 31 |
表格3
4 | 5 | 6 | 7 |
---|---|---|---|
12 | 13 | 14 | 15 |
20 | 21 | 22 | 23 |
28 | 29 | 30 | 31 |
表格4
8 | 9 | 10 | 11 |
---|---|---|---|
12 | 13 | 14 | 15 |
24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
表格5
16 | 17 | 18 | 19 |
---|---|---|---|
20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |