今天偶然看到高中群有这么一道题,想了许久没有什么很好的思路。但是高中那一群变态、非人类,竟然做了出来。
首先有一个思路是这样的: 根据题目可以知道,国王只有两次试酒机会,也就是两次就要把酒给找出来。所以就有了如下的思路。就是一个人品尝20桶(当然,只是喝一口)需要25个人,在大约24小时后,会有一个人中毒死掉,剩余的24个人把死了的那个人喝掉的20桶酒,一人品尝一桶,再过24小时就可以找出有毒的那桶酒; 大家可能看了出来,24个人大于定位出来的20桶酒。所以理论上讲是不需要那么多人的,那么到底需要多少人呢?
第二轮是务必测试出毒酒的: 这里又分两种情况: 1. 所有的囚犯都没有死,那就是毒酒在剩余的酒中,所以 X>=500-X·Y-1 2.假如,有一个囚犯死去。那么该囚犯所测试的Y桶酒中有毒,那么剩余的X-1个囚犯数量是要大于等于Y-1的。 即:X-1>=Y-1 A)X>=500-X·Y-1 B)X-1>=Y-1
计算到这里,大家是不是很开心呢,感觉这个问题已经解决了? 其实我想说,我们忽略了一个重要的条件 ——>48小时后举行酒会,23~24小时内毒死人的条件!!!!!
所以正确的做法是这样的: 大家应该都知道平面直角坐标系吧,在同一平面内只需要两个值(X,Y)就可以确定一个具体位置。 这个思路就跟这句话有关!
把这些酒编号: 1,2,3,4…….499,500;分为22组,每组23桶酒。
1,2,3,4,5,6,7,8,9………………..20,21,22,23; 24,25,26………………………………….44,45,46; 47,48……………………………………….67,68,69; ……………………………………………………………… …………………………………………………………….. 461,462……………………………………482,483; 484,485,486……………………498,499,500;
大概就能得出这么一个类似正方形的二维数组,因为22X23>500,所以500桶酒肯定可以都放上去。接下来就是最关键的了:
刚才提到平面直角坐标系,只需要两个值就能判定其具体位置。那么这道题最终结果就是只需要两个囚犯即可。 (假设是A囚犯与B囚犯)
思路: 共有48个小时的时间供我们挥霍,我们先用前24小时: 第1个小时A囚犯把第1行喝掉,第2小时把第2行喝掉。。。以此类推; 同时,B囚犯第1小时把第1纵行喝掉,第2小时把第2纵行喝掉。。。以此类推;
前24小时把酒都喝完,我们只需要知道两名囚犯的死亡时间就可以推断出那桶酒的位置。
只能感叹数学真是太伟大了,思维是如此的重要!
这里也可以继续扩展,假如有1000桶酒该怎么算?或者更多?自然而然的我会想到三维、四维空间的只是去解决!甚至是多维空间,用Java的多维数组去思考,我想应该会很好理解,也为自己提供了一个不一样的思路!