在程序员面试的时候面试官有时会考我们一些计算机编程方面的智力题,这便是一道有趣的智力题,这道题考察了我们对bit位的灵活运用。
首先1000与1024相差无几,于是我们可以用10个bit位来对这1000瓶药物进行编号,也就是将第n瓶药物的编号转化为对应的二进制。
然后我们拿10个空瓶编号为(10)(9)(8)(7)(6)(5)(4)(3)(2)(1)。将二进制的第一位(最右边的为第一位)为1的瓶子每瓶取一滴药水装入编号为(1)的瓶子,将二进制的第二位为1的瓶子每瓶取一滴药水装入编号为(2)的瓶子,以此类推。
最后用10只老鼠编号为10,9,8,7,6,5,4,3,2,1喝下对应编号瓶子的药水,一个星期后检查老鼠的存活情况。
一个星期后死了的老鼠对应位置为1,存活的老鼠对应位置数字为0,于是就组成了一个二进制数字,而这个对应的二进制数字所对应的十进制数字就是那瓶有毒药物的编号。
那这其中的道理是什么呢?因为老鼠只要服用任意量有毒药水就会在一个星期内死亡,而只要喝了有毒药水编号所对应的二进制的位数为1的药水的老鼠必定会死亡,喝了有毒药水编号所对应的二进制的位数为0的药水的老鼠不会死亡,所以最后老鼠所组成的二进制数字就对应那瓶有毒的药水。
2.有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?
过桥方法:在手电的时候让速度快的人送,相当于送快递的,速度快,办事效率高。
过桥具体步骤:
过桥:1,2号过去; ---> 2分钟(1,2号)
返会:1号 ---> 2+1分钟(2号)
过桥:5,10号 ---> 2+1+10分钟(2,5,10号)
返回:2号 ---> 2+1+10+2分钟(5,10号)
过桥:1,2号 ---> 2+1+10+2+2分钟(1,2,5,10号)
第一次将2号送过去是为了将5,10号送过来之后返回去速度快
总共5次往返,2次单人,3次双人,1号2号分别充当快递员
思想:对于多人n次的情况下:派遣速度最快的两人作为快递员 然后其他的按照速度大小排名,速度相邻最近的最为一组过桥,然后又是快递员的接送问题,问题迎刃而解。
过桥次数:
3人 ---> 3次
4人 ---> 5次
5人 ---> 7次
6人 ---> 9次
7人 ---> 11次
8人 ---> 13次
对于n人---->过桥次数 N = 2*n -3;