下面这个有趣的问题来自于 2012 年 4 月的 IBM Ponder This 谜题。
有 8 根很长的并且颜色不同的水管并排放在一起, A 、 B 两人分别位于这些水管的两端。两个人手中各有若干根很短的橡皮管,他们可以用这些橡皮管任意连接自己这一侧的水管口。 A 的旁边还有一个水龙头, A 可以用橡皮管把水龙头与自己这一侧的其中一个水管口相连。
A 、 B 两人各将获得一个五位 01 串,然后两人可以根据自己手中的 01 串来连接水管口。当 A 打开水龙头后,容易看出,水必然会从其中一侧流出。两人需要保证,如果两人手中的 01 串相等,则水从 A 的一侧流出,否则水从 B 的一侧流出。他们事先可以商量一个策略,但游戏一旦开始,两人一旦拿到各自的 01 串之后,就不允许再交流了(因此两人都不知道对方手中的 01 串是什么)。请你想出一个能保证两人获胜的策略。
让我们先来看另一个问题。假如 A 、 B 之间有 4 根水管,他们各自将获得一个 0 到 5 之间的整数,如何才能让水从 A 侧流出,当且仅当两人手里的整数相等?注意到,从 4 根水管中选出 2 根共有 6 种方案,两人可以事先约定好,每个整数分别代表连接哪两根水管。游戏开始后, B 把他手中的整数所对应的“水管对”连接起来, A 也找出自己手中的整数所对应的两根水管,并把其中一个记为“入口”,把另一个记为“出口”,然后把另外的两根水管连接上。 A 把水龙头接到“入口”,如果 A 、 B 两人的数相等,水将会从“出口”流出。
好了。实际上, A 、 B 之间将会有 8 根水管,每 4 根水管能处理 6 个数的情况, 8 根水管不就能处理 36 个数的情况了吗? A 、 B 两人可以把 0 到 35 的整数想成是一个两位的六进制数,并约定好哪 4 根水管代表低位,哪 4 根水管代表高位。这样,两人不就能判断出低位和高位是否分别相等了吗?
但是这里有一个问题: A 那里只有一个水龙头,而上述方案需要给高位和低位各一个水龙头。我们需要想个办法把“低位出水”和“高位出水”做一个逻辑与的运算。接下来的一步就牛了: A 可以把水龙头接到低位的“入口”,再把低位的“出口”接到高位的“入口”。如果 A 、 B 手中的数完全相等,水最终会从高位的“出口”流出。
五位 01 串共有 32 种可能,因而原问题自然也就解决了。
sf
隔2月了
好长时间没更新了吧。。
重于更新了
确实好长时间没更新了啊
前排
好吧我承认我没看懂
懂了。!
把六种情况的两个方案转化为两位的六进制数这个方法不错啊。所谓的分而治之么?学习了。
这里的入口和出口的选择可以随机吧,不过大牛这样表达更容易理解啊。
还有就是大牛快点更吧,每天点开来看大牛的博客没有更新就是一阵失望啊。。
M67谈恋爱之后就变懒了啊……这都快俩月了……好怀念以前几天一更的日子
好久没更了呢…….不过M67您的博客还是这么神
每天一看,终于更新了
哈哈
巧妙的分割呢
我還在想3根水管、一位01串的情況
學習了
好办法。。。。
10L是真相么?
8选4可以有70种情况,处理6位2进制串也没问题吧,最后一步逻辑与运算有些多余
3根水管一位01串:3根水管分别编号0,1,2,A把水龙头接0/1号管(根据手中数字),B把0/1号管接2号管
17楼正解.把70个数按有4位为1的8位2进制数编码.乙把为1的4个管子任意分成2组,每组的两个管子相连.甲把为0的任意4个管子同样处理.然后甲向为1的4个管子中的任意一个注水都可以.
学计算机的都应该想到,这个就是取反码.然后等逻辑与之后得0,说明两个数一样.
错了,应该不行.我是19楼
我觉得这个解法有点问题,此解法确实能保证在两边数值相同的时候水流从A端流出,但是不能保证两边数值不等的时候水流从B流出。原因是如果B拿到的数字和A拿到的数字在事先约定的表示中共享A选为入口的管子时,水流依然会从A端流出,只是出口不会是A所期待的出口。
可能说的有点饶舌,方便起见,以lz举的4根管子的例子来说:
四根管子记为1,2,3,4,并且两端记为A1,B1,A2,B2,以此类推。
如果A拿到的数字表示为管子1+管子3,A选择管子1作为入口,3作为出口。如果B拿到的数字跟A相同,e那么表示肯定也是管子1+管子3,B只要连接B端的1+3,那么水就会从管子3的A端流出。如果B拿到的数字跟A不同,假设为管子1+管子4,B连接B端的1+4之后,水并不会会从A端的4流出,而是从管子4的B端流出。
首先21楼最后一句表达应该是:“如果B拿到的数字跟A不同,假设为管子1+管子4,B连接B端的1+4之后,水并不会会从B端的4流出,而是从管子4的A端流出。”
其次,思考了一顿饭的时间发现好像21楼说的是对的。比如在他的基础上在深化一下。如果是以A端3作为入口那么不就是B端出了么?但是万一B端要求的管子是3,4呢?还是导致4管出。。
啊啊啊啊我不知道啊不知道。。。。。。。。。。。
22楼的情况我想了一个取巧的办法,假设A是1、2,B是1、3,只要把A端的3和4口连起来水就从b侧流出来了
19樓說得對
确实不对..
21、22楼没有仔细看答案,A 把另外的两根水管用短橡皮管连接上了……
4选2的时候有没有证明过程啊。
验证下头像修改好没有
呃,我还在想怎么搭异或门……
5位01串好有误导性啊,我还在想怎么搭异或门……
好棒啊!
有点儿意思!
这个挺有趣
求解?
最开始我想到的是C(8,2),但这仅仅是连接两根管子的情况,忽略了题目“若干根橡皮管”。答案实际就是“两位6进制数”,如果是n根水管,答案似乎会非常复杂。。。