有 1000 瓶药物,但是其中有一瓶是有毒的,小白鼠吃了一个星期以后就会死掉!请问,在一个星期内找出有毒的
药物,最少需要多少只小白鼠?最少需要10只小白鼠
法1:
(1)将药物1-1000编号,并用二进制表示出来
(2)老鼠用二进制编号
0000000001
0000000010
0000000100
0000001000
0000010000
0000100000
0001000000
0010000000
0100000000
1000000000
(3)让第n个老鼠喝下第n个bit位为1瓶子中的药水
将死掉的老鼠的编号做与运算就能得到毒药编号法2:第一次: 将1-500瓶兑在一起喝。如果老鼠死了,则拿另一只老鼠去品尝501-725瓶兑的药水。否则去喝2-250瓶兑的水。采用如此二分法,因为2^10>1000 2^9<1000,所以10次就可以找出。现在回到原题,老鼠会在24小时后死亡,这样的化就不能跟去前一次的结果作出决策。但是可以覆盖二分的所有支路,在24小时后,一次性作出判断。相当于将串行的二分法,改为并行的二分法。具体如下:第一只: 喝 1-500第二只 1-250 500-725第三只 1-125 250-375 500-625 725-850....到最后中毒的可以通过交叉中毒分析出是那瓶。也是一只老鼠喝多瓶药水与其他老鼠部分相交而且与每只相交的部分还不一样。当老鼠达到一定数量,就能过滤出到底那瓶有毒了。
A、B、C、D 四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时 1、2、5、10 分钟,只有一支手电,并且
同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?首先,A和B同时过,需要2分钟.再A返回,需要1分钟,再D与C过桥,需要10分钟,再B返回,需要2分钟,再AB过去2分钟.2+1+10+2+2=17
有 50 家人家,每家一条狗。有一天警察通知, 50 条狗当中有病狗,行为和正常狗不一样。每人只能通过观察别
人家的狗来判断自己家的狗是否生病,而不能看自己家的狗,如果判断出自己家的狗病了,就必须当天一枪打死自
己家的狗。结果,第一天没有枪声,第二天没有枪声,第三天开始一阵枪响,问:一共死了几条狗?A、假设有1条病狗,病狗的主人会看到其他狗都没有病,那么就知道自己的狗有病,所以第一天晚上就会有枪响。因为没有枪响,说明病狗数大于1。
B、假设有2条病狗,病狗的主人会看到有1条病狗,因为第一天没有听到枪响,是病狗数大于1,所以病狗的主人会知道自己的狗是病狗,因而第二天会有枪响。既然第二天也每有枪响,说明病狗数大于2。
由此推理,如果第三天枪响,则有3条病狗。
用数字 5,5,5,1 ,进行四则运算,每个数字当且仅当用一次,要求运算结果值为 24
5*(5-1%5)=5*5-5%5=25-1=24
13 个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球?
取出13个球,分成4,4,5三组,将4与4对比。
4--4称一次,如果平衡,就在另5个中,拿3个正常的与5个中的三个对比,如果相等,在剩余两个中,拿正常的一个与剩余2个中一个对比,出结果,如果上次,3v3不相等那么知道到球是轻还是重,取不正常的3个中的2个1v1,得结果。如果 4v4不相等取正常的(5个中取)3个放入左天平,把左天平3个放入右天平,右天平取出3个,如果相等,必在从右天平取出的3个中,且知是重还是轻,从中取2,进行1v1得结果,如果不相等,天平的偏重方向未发生改变,说明必在 4v4时未被移动的两个球,左右一个,取一个正常的与其中一个对比得结果如果不相等,天平偏重发生改变,必在从左天平移动到右天平那三个球中,且知球的是偏重还是篇轻,去其中2个1v1得结果.
假设你站在镜子前,抬起左手,抬起右手,看看镜中的自己。当你抬起左手时,镜中的自己抬起的似乎是右手。可
是当你仰头时,镜中的自己也在仰头,而不是低头。为什么镜子中的影像似乎颠倒了左右,却没有颠倒上下?上下和左右的定义不同,上下是面对称的,左右是旋转对称的
一个屋子有一个门(门是关闭的)和3盏电灯。屋外有3个开关,分别与这3盏灯相连。你可以随意操纵这些开关,可
一旦你将门打开,就不能变换开关了。确定每个开关具体管哪盏灯?假设 3 个开关为 A,B,C ,将 A 开关打开,一段时间后关 A ,打开 B,进入房间,A 开关对应的灯发热, B 开关对应的灯亮着,C 开关对应的灯灭着。
每个飞机只有一个油箱,飞机之间可以相互加油(注意是相互,没有加油机)一箱油可供一架飞机绕地球飞半圈。
问题:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,
而且必须安全返回机场,不允许中途降落,中间没有飞机场)步骤:1,2,3号飞机从 A 飞机场逆时针同时出发,到达 B 飞机场,都用了 1/4 由,3 号飞机给 1,2号飞机加满油后返回 A 飞机场2,3号此刻都是满油,从 B 出发到达 C,2 号给 1 号加满油后返回 A1 号从 C 飞到 G,油用完4 号飞机顺时针从 A 出发到 G,用了 1/2 的油,再给 1 号加 1/4 的油,1,4同时从 A 到 H5 号飞机从 A 顺时针到 H,用了1/4油,分别给1,4号 1/4 ,三者同时从 G 返回 A
有3箱水果,一箱是苹果,一箱是橘子,一箱是两种水果的混装,三个箱子上都贴了标签,但所有的标签都贴错了
现在你只拿出一个水果来判断3个箱字里的情况取出混装箱子里的水果,里面可能是苹果或橘子。
1. 如果是苹果,那么贴苹果的箱子里面是橘子,贴橘子的箱子里面是混装。
2. 如果是橘子,那么贴橘子的箱子里面是苹果,贴苹果的箱子里面是混装。
3ml 5ml 杯子各一个,拼出 4ml 的容量。
用5ml杯子接满水,再将杯子中的水倒入3ml杯子中,剩下2ml水。
再将3ml中水倒掉,将剩下的2ml水再倒入3ml杯子中。
将5ml杯子接满水,接满后将3ml杯子中倒水直到倒满便得到了4ml水。
有两位盲人,他们都各自买了两对黑袜和两对白袜,八对袜子的布质、大小完全相同,而每对袜子都有一张商标纸
连着。两位盲人不小心将八对袜子混在一起。他们每人怎样才能取回黑袜和白袜各两对呢?将每对袜子拆开一人一只。
一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其他人帽子的颜
色,却看不到自己的。主持人先让大家看看别人头上戴的是什么帽子,然后关灯,如果有人认为自己戴的是黑帽
子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三
次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子?有三个人戴黑帽。假设有N个人戴黑帽,当N=1时,戴黑帽的人看见别人都为白则能肯定自己为黑。于是第一次关灯就应该有声。可以断定N>1。对于每个戴黑帽的人来说,他能看见N-1顶黑帽,并由此假定自己为白。但等待N-1次还没有人打自己以后,每个戴黑人都能知道自己也是黑的了。所以第N次关灯就有N个人打自己。
你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的重量+1.只称量一次,如何判断哪
个罐子的药被污染了?四个罐子分别标号为1,2,3,4.
从1,2,3,4四个罐子中分别取出1,2,4,8颗药丸,并在一起称重。
对比药丸对比15颗为被污染药丸重量
只有一罐被污染时:
如果重1,2,4,8则分别对应编号为1,2,3,4装药罐被污染。
有两罐被污染时:
如果重3则对应1,2被污染。
如果重5则对应1,3被污染。
如果重9则对应1,4被污染。
如果重6则对于2,3被污染。
如果重12,则对应3,4被污染。
有三罐被污染时:
如果重7,则对应1,2,3被污染。
如果重11,则对应1,2,4被污染。
如果重13,则对应1,3,4被污染。
如果重14,则对应2,3,4被污染。
有四罐被污染时:则重15.
假设你有8个球,其中一个略微重一些,但是找出这个球的惟一方法是将两个球放在天平上对比。最少要称多少次
才能找出这个较重的球?答:2 次方法:从 8 个球中分别任取 3 个放在天平上对比,两边重量相等,则较重的球在剩下的两个球中,再在天平上进行对比就可以找出较重的球
两边重量不等,则待找的球在较重的一方中,在该方任取两个球进行对比若重量相等,则剩下的球就是较重的球,若重量不等,则较重的一方就是要找的球
有7克、2克砝码各一个,天平一只,如何只用这些物品三次将140克的盐分成50、90克各一份?
1.先将140g盐,2g砝码二者等分为(69+2)g,71g的两份。
2.再用69g盐+7g砝码二者等分为38g盐与(31+7)g的两份。
3.从31g盐或者69g盐中用砝码取出2g并放入38g盐中,得到40g盐,并将剩下的盐混合得到100g盐。
1000!有几位数,为什么?
解析:用科学计数法表示 b = a * 10^X,其中 1 < a <10,x 为整数,则 b 有 1 + X 位数。比如:1509 = 1.509 * 10^3,则 1509 有 1 + 3(X) = 4 位数。当 1 < a <10,0 < lg(a) < 1,即 lg(a * 10^X)= lg(a)+ 1 的整数部分就是 Y那么求 1000!有几位数就转化为求 lg(1000!)+ 1lg(1000!)= lg(1000 * 999 *……*1)= lg(1000)+ lg(999)+ ……+ lg(1)(为保证 1000 个小数相加数值精确,采用 float (double也可以)存储结果,若使用 int 会导致结果偏差较大)
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<math.h> #include<stdlib.h> int main() { int a = 0; float num = 0.000; scanf("%d", &a); for (int i = 1; i <= a; i++) { num += log10(i); } printf("%d\n", (int)num + 1); system("pause"); return 0; }
小明一家过一座桥,过桥时是黑夜,所以必须有灯。现在小明过桥要1秒,小明的弟弟要3秒,小明的爸爸要6秒,
小明的妈妈要8秒,小明的爷爷要12秒。每次此桥最多可过两人,而过桥的速度依过桥最慢者而定,而且灯在点燃
后30秒就会熄灭。问:小明一家如何过桥?小明和弟弟过桥用了3秒,然后小明返回用了1秒,妈妈和爷爷过桥用了12秒,弟弟返回用了3秒,小明和弟弟过桥用了3秒,小明返回用了1秒,小明和爸爸过桥用了6秒。
3+1+12+3+3+1+6=29秒
烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一
个小时十五分钟呢?取3根绳子,编号1,2,3;
1号两头同时点燃,2号点燃一头,待一号绳子烧完,过了半小时,再点燃二号另外一头,此后又过15分钟。
待二号烧完,点燃三号的两头,燃烧完耗时半小时。
一共耗时30+15+30=一小时15分钟。
一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从一楼到十楼,每层楼电梯门都会打开一
次,只能拿一次钻石,问怎样才能拿到最大的一颗?开放性试题,没有固定答案,以下是参考网上大佬总结出的几条:
1.37%法则:先放弃前37%(1/e)的钻石,此后选择比前37%都大的第一颗钻石。注意这个策略只是以最大的概率获得最大的那颗钻石,并不考虑第二大的钻石和最小钻石的区别。
2.前5层不拿,仅观察,然后再判断后面钻石的大小,如果遇到比前5层大的钻石就拿,否则就拿最后一颗钻石。
3.先拿一楼钻石,然后再一层一层比较,如果大了,就换成现在手中的钻石(这个解释存在异议,题目中是总共只能拿一次?还是每层只能拿一次?,如果是前者,这个解释是错误的)
4.考虑到哲学问题(和拾麦穗很相似)。不管最大的钻石在几楼,直接拿一楼的钻石。这里引出苏格拉底让弟子拾麦穗的故事。
古希腊有一位大学者,名叫苏格拉底。一天,他带领几个弟子来到一块麦地边。地里满是沉甸甸的麦穗。苏格拉底对弟子们说“你们要去地里挑一个最大的麦穗,只许进不许退,我在麦地的尽头等你们。”
弟子们听懂了老师的要求后,就走进了麦地。
地里到处都是大麦穗,哪一个才是最大的呢?弟子们埋头向前走。看看这一株,摇了摇头;看看那一株,又摇了摇头。他们总认为最大的那一穗还在前面呢。虽然,弟子们也试着摘了几穗,但并不满意,便随手扔掉了。他们总以为机会还很多,完全没有必要过早地定夺。
弟子们一边低着头往前走,一边用心地挑挑拣拣,经过了很长一段时间。
突然,大家听到了苏格拉底苍老的如同洪钟一般的声音:“你们已经到头了。”这时,两手空空的弟子们才如梦初醒,他们回头望了望麦垄,无数株小麦摇晃着脑袋,似乎在为他们惋惜。
苏格拉底对弟子们说:“这块麦地里肯定有一穗是最大的,但你们未必能碰见它;即使碰见了,也未必能作出准确的判断。因此最大的一穗就是你们刚刚摘下的。”
苏格拉底的弟子们听了老师的话,悟出了这样一个道理:人的一生仿佛也在麦地中行走,也在寻找那最大的一穗。有的人见到了颗粒饱满的“麦穗”,就不失时机地摘下它;有的人则东张西望,一再地错失良机。当然,追求应该是最大的,但把眼前的一穗拿在手中,这才是实实在在的。
你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,
如果只许你两次把金条弄断,你如何给你的工人付费?两次弄断,将金条分为 [1,2], [3], [4,5,6,7] 三份
第一天:给工人 [3]
第二天:给工人 [1,2],换回 [3]
第三天:给工人 [3]
第四天:给工人 [4,5,6,7],换回 [1,2], [3]
第五天:给工人 [3]
第六天:给工人 [1,2],换回 [3]
第七天:给工人 [3]