技术的乐趣在于分享,欢迎多多交流,多多沟通。
全部博文(877)
分类: LINUX
2014-06-11 10:56:58
13球称重问题是一个很经典的题, 原题大意为: 网上有很多答案, 但有很多是错误的, 甚至有些人说13球问题在不知道坏球比好球轻还是重的情况下无解. 我可以很肯定的说13球问题是有解的并仔细验证过. 先卖个关子, 等待大家的答案.
我的方法(将小球编号1-13): STEP[1]: 1,2,3,4 v 5,6,7,8 如果平衡: 说明坏球在9-13内,则进行:
STEP[2] 1,2,3 v 9,10,11 左盘全是好球,测试9,10,11
如果相等说明坏球在 12,13中,
这样第3步随便拿一个好球与12相比就可以判断谁是坏球
如果仍然相等,就判断不出坏球是轻还是重了,但仍知道谁是坏球
如果不等,说明坏球在 9,10,11中,并且可以知道坏球是轻还是重.
这样第3步随便拿其中两个球,例如9,10称一下就能得出结论.
相等则11是坏球;因为已知坏球是轻还是重,所以如果不等也可以轻易判断出哪个是坏球 如果第一步不平衡,说明坏球在1-8中; 9-13是好的球.于是: STEP[2] 1,2,3,5,6 v 9,10,11,12,13 与第一步相比,这一步拿走了左边的4和右边的7,8, 把5,6挪到了左盘, 而右盘全部放好球.为什么是5个? 如果平衡: 坏球肯定就在拿走的4和7,8中了,并且不管是4,还是7,8都可以根据第一次测试判断坏球的轻重.
那第3步: 7 vs 8, 平衡则坏球是4;不平衡:则坏球肯定在7,8中,再根据第一步的结构就可以判断出坏球来.
例如:若第一次是右边重,则坏球肯定是重的(因为第一步7,8就在右边嘛),于是第3步重的就是坏球.
如果不平衡: 就看测量结果是否与第一次一致了.
例如 第一次左边重, 第二次还是左边重, 那就说明坏球在1,2,3中, 并且比较重.一次就可以判断出来.
如果第一次左边重, 第二次却变成右边重了, 还能说明啥, 说明5,6中有一个比较轻的坏球呗, 一次就可以判断出来.
OK, 答案貌似没问题, 不过问题来了:
在回答这3个问题之前, 先来说一下与这个13球称重问题有关的一些数字: 这两个数字说明3次确定出这26种情况是"有可能"的.(因为是整数... 总不能一次称4.333个球吧?呵呵)
回复caoamanno1:你仔细想想,呵呵. 给出的方法中唯一判断不出坏球轻重的情况就是1,2,3,4=5,6,7,8 然后又 1,2,3=9,10,11,然后再1=12, 判断坏球是13, 但不知道轻重.
若要证明的确做不到的话,可以建模穷举解法,不过当时思路不清晰, 只是写了一个验证程序,26种情况都验证了没问题. 今天跟同事讨论的时候突然想通了,不过写出程序还要一段时间, 到时候再发博客讨论吧. |