|
|
很明显,问一次可以确定二元组中的一个元素。四元组问二次即可,八元组问三次,十六元组问四次,一般地说,问n次可以辨别出 2的n次方元组里的任何一个选定的元素。
在这个题目里,P先生的电话号码是一个七位数,也就是说,他的电话号码是1000000与9999999之间的某一个数码。S先生知道p先生还能击响受话器来回答问题的时候,最好的办法莫过于用是非提问的形式来确定对方的电话号码,而这样的提问最多只需24次即可。 因为2的24次方=16777216,它大于七位数中最大的一个数9999999。但是只问2次却未必能达到目的,因为2的23次方=8388608。如果P先生的电话 号码比这个数大,就有可能问不出来。S先生的办法是:取1000000与9999999中间的一个数即5000000,然后问对方的电话号码是否大于5000000,这样就可以确定P先生的这个电话号码是在1000000与5000000之间,还是在5000000与9999999之间了。在得到回答后,不断重复上述步骤,问24次就可以得到要找的电话号码。
我们不妨假设P先生的电话号码是9360702,那么,S先生的提问将是:
问 回答
1·这个数大于5000000吗? 是的
2·这个数大于7500000吗? 是的
3.这个数大于8750000吗? 是的
4·这个数大于9370000吗? 不是
5·这个数大于9060000吗? 是的
6·这个数大于9210000吗? 是的
7·这个数大于9290000吗? 是的
8·这个数大于9330000吗? 是的
9·这个数大于9350000吗? 是的
10·这个数大于9360000吗? 是的
11·这个数大于9365000吗? 不是
12·这个数大于9363000吗? 不是
13·这个数大于9361000吗? 不是
14·这个数大于9360500吗? 是的
15·这个数大于 9360800 吗? 不是
16·这个数大于 9360600 吗? 是的
17·这个数大于 9360700 吗? 是的
18·这个数大于 9360750 吗? 不是
19·这个数大于 9360725 吗? 不是
20·这个数大于 9360712 吗? 不是
21·这个数大于 9360706 吗? 不是
22·这个数大于 9360703 吗? 不是
23·这个数大于 9360702 吗? 不是
24·这个数大于 9360701 吗? 是的
由此就可以查得电话号码是 9360702。 s先生一共只问了24个问题