网上 有好几种 解决方案,skywind.name上的这个最棒, 赞一下!
可惜 偶 苦思冥想 3 个小时,思路换了3、4种,也没找到完美解决方案。
以下 是 转自 skywind.name
12个小球称重问题的完美解法
先看答案,设小球编号分别从A到L,不管每次的结果如何(没有条件分支),如下比较三次:
A B C D === E F G H
A H I K === C D E J
C G I L === A D F K
我们将天平左侧重称为结果1;右侧重为结果-1;平衡为结果0。显然,如果上面三次比较的结果为1,1,-1,则A是坏的,并且比较重。如果结果是-1,0,0,则B比较重。我们还能得出一个额外的解,就是三次都平衡,则没有错误的小球。
所有球比较重的情况列表如下,将结果取反就是轻球的情况。可以看出,每个小球是否轻重都有且只有一种结果状态相对应。
A B C D E F G H I J K L
1 1 1 1 -1 -1 -1 -1 0 0 0 0
1 0 -1 -1 -1 0 0 1 1 -1 1 0
-1 0 1 -1 0 -1 1 0 1 0 -1 1
那么这个表是如何来的呢?能不能有其他本质上不同(不是这个次序的重排列)的类似方案呢?
先说怎么作这个表,将每一竖列看做一个向量,向量的每个分量可能取值为-1,0,1;按字典序取12个排在(000)后面的向量就是:
A B C D E F G H I J K L
0 0 0 0 1 1 1 1 1 1 1 1
0 1 1 1 -1 -1 -1 0 0 0 1 1
1 -1 0 1 -1 0 1 -1 0 1 -1 0
检查每一行,要求-1和1的数目相同,如果不能满足,则将某个1或-1取反。第三行自然满足,第二行可以把C的1改成-1,第一行可以更改F、H、J、L的值来达到目的。修改后的矩阵如下:
A B C D E F G H I J K L
0 0 0 0 1 -1 1 -1 1 -1 1 -1
0 1 -1 1 -1 -1 -1 0 0 0 1 1
1 -1 0 1 -1 0 1 -1 0 1 -1 0
这个结果与前面看起来不同,但实质一样。另外,通过这种方式也可以看出,3次天平称量13个小球问题是无解的。