烧脑子计算
来源:互联网 发布:新手怎么来淘宝 编辑:程序博客网 时间:2024/04/30 07:19
问题:
请诸位为乌有国王出个主意:500桶酒,其中1桶是毒酒;48小时后要举行酒会;毒酒喝 下去会在之后的第23-24小时内毒死人;国王决定用囚犯来试酒,不介意囚犯死多少,只要求用最少的囚犯来 测试出哪一桶是毒酒,问最少需要多少囚犯才能保证找出毒酒?如你们没做过,欢迎大家动动脑筋。
今天偶然看到高中群有这么一道题,想了许久没有什么很好的思路。但是高中那一群变态、非人类,竟然做了出来。
首先有一个思路是这样的: 根据题目可以知道,国王只有两次试酒机会,也就是两次就要把酒给找出来。所以就有了如下的思路。就是一个人品尝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的多维数组去思考,我想应该会很好理解,也为自己提供了一个不一样的思路!
- 烧脑子计算
- 练练脑子
- 心很烦,脑子里很乱
- 混乱的脑子
- 奇怪的脑子
- 脑子生锈了
- 脑子进水了
- 脑子一片空白了
- 继续脑子进水。
- 脑子有点乱,来缕一缕
- 脑子没法停下来
- 脑子一抽
- 刀子.鞋子.脑子
- 一个脑子不够用
- 脑子短路瞬间
- 脑子是个好东西
- 脑子是个好东西
- not all there脑子不正常
- Merge Sorted Array
- 逻辑斯蒂回归和决策树
- 【九度OJ】题目1442:A sequence of numbers 解题报告
- 简易计算器
- Intellij中的main函数和System.out.println()和eclipse不同
- 烧脑子计算
- 知识点总结
- 在vue中使用百度地图
- GDAlC#环境配置
- javaSE_第二部分 数组及内存浅析_方法的重载
- 查看哪些进程占用了端口
- CF 591
- 对于一个小白Android该怎么学?
- 手机长按触发事件(网页端)