主题:【原创】从两个经典智力趣题谈起(一) -- 丁坎
这里举个实例,三次称12/13个球的方法
首先编号,编号过程冗长无聊,大家完全可以跳到最后面看结果(ctrl+f查找“好了现在开始称”)。
第一步把0-26用三进制表示出来:
decimal ternary
0 000
1 001
2 002
3 010
4 011
5 012
6 020
7 021
8 022
9 100
10 101
11 102
12 110
13 111
14 112
15 120
16 121
17 122
18 200
19 201
20 202
21 210
22 211
23 212
24 220
25 221
26 222
在把其中互补的放在一块
#1 #2
000 222
001 221
002 220
010 212
011 211
012 210
020 202
021 201
022 200
100 122
101 121
102 120
110 112
111 111
调整一下编号1和编号2,除了000/222以外,让4个小球编号1的每一位上是0的数目和是2的数目相等。我用的方法是,先把编号中1的个数小于2的小球花插着标上0或1, 再让不为1的每一位除以2和它异或:
switch? #1 #2 1 2 3
0 001 221 0 0
1 002 220 1 1 0
0 010 212 0 0
x 011 211 x
1 012 210 1 0
0 020 202 0 1 0
1 021 201 1 0
0 022 200 0 1 1
1 100 122 1 1
x 101 121 x
0 102 120 0 1
x 110 112 x
剩下的3个x就等于它所在的列里1的个数被4减:
switch? #1 #2 1 2 3
0 001 221 0 0
1 002 220 1 1 0
0 010 212 0 0
1 011 211 0
1 012 210 1 0
0 020 202 0 1 0
1 021 201 1 0
0 022 200 0 1 1
1 100 122 1 1
0 101 121 0
0 102 120 0 1
1 110 112 1
如果一个小球被标为1,那么把它的编号1和编号2互换:
#1 #2
001 221
220 002
010 212
211 011
210 012
020 202
201 021
022 200
122 100
101 121
102 120
112 110
终于,我们用它给小球编号
#1 #2
1 001 221
2 220 002
3 010 212
4 211 011
5 210 012
6 020 202
7 201 021
8 022 200
9 122 100
a 101 121
b 102 120
c 112 110
好了现在开始称,每次称的时候,把所有编号1中第i位是0的放在左边,第i位是2的放在右边:
第一次称, 1368在左边,2457在右边
第二次称, 17ab在左边,2689在右边
第三次称, 2356在左边,89bc在右边
每次称完,如果左边重,记作0,右边重,记作2,一样重,记作1。称n此后得到的数字就是有问题小球的编号。如果是编号1,这个小球比其他小球重。如果是编号2,这个小球比其他小球轻。如果得到的数字是111,那么有问题的是从来没有称过的小球,也就是第13颗小球,但是我们不知道它轻还是重。
- 相关回复 上下关系8
🙂送花,期待下篇 王树 字0 2008-08-05 09:35:43
🙂上花 kmy1810 字0 2008-08-05 04:59:56
🙂这条更大的“鱼”,好像已经出水了。不过,感觉还没有讲完, 不同的蚕 字30 2008-08-05 01:56:36
🙂三次称12/13个球的方法
🙂提问 1 王树 字915 2008-08-07 14:39:23
🙂呵呵,不用那么认真吧? 1 使用尽量中文 字476 2008-08-08 11:04:37
🙂【原创】从两个经典智力趣题谈起(二): 12 丁坎 字6333 2008-08-04 03:31:35
🙂切环问题,须计入实践上的复杂性,2^k 序列未必是最优的 3 衲子 字401 2008-08-04 04:07:57