首先,我们需要了解一些进制相关的知识。一般生活中我们使用的都是十进制数,十进制数是指由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 |
