来自苹果、谷歌、微软等知名公司六道有趣智力面试题(转自ACM之家)
说明:
1.NO.3答案不止一种
2.NO.5的完美负载均衡思想值得深入学习
NO.1
有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。
NO.2
有个8×8棋盘,其中对角的角落上,两个方格被切掉了。给定31块多米诺骨牌,一块骨牌恰好可以覆盖两个方格。用这31块骨牌能否盖住整个棋盘?请证明你的答案(提供范例,或证明为什么不可能)。
NO.3
有两个水壶,容量分别为5夸脱(美制:1夸脱=0.946升,英制:1夸脱=1.136升)和3夸脱,若水的供应不限量(但没有量杯),怎么用这两个水壶得到刚好4夸脱的水?注意,这两个水壶呈不规则形状,无法精准地装满“半壶”水。
思路:
可以先把3夸脱装满,倒入5夸脱。再把3夸脱装满,倒入5夸脱使5夸脱装满,这时3夸脱还剩1夸脱。把装满的5夸脱倒掉,把3夸脱中剩的1夸脱倒进5夸脱。再将3夸脱装满并倒进5夸脱即可。
NO.4
有个岛上住着一群人,有一天来了个游客,定了一条奇怪的规矩:所有蓝眼睛的人都必须尽快离开这个岛。每晚8点会有一个航班离岛。每个人都看得见别人眼睛的颜色,但不知道自己的(别人也不可以告知)。此外,他们不知道岛上到底有多少人是蓝眼睛的,只知道至少有一个人的眼睛是蓝色的。所有蓝眼睛的人要花几天才能离开这个岛?
NO.5
有栋建筑物高100层。若从第N层或更高的楼层扔下来,鸡蛋就会破掉。若从第N层以下的楼层扔下来则不会破掉。给你2个鸡蛋,请找出N,并要求最差情况下扔鸡蛋的次数为最少。
NO.6
走廊上有100个关上的储物柜。有个人先是将100个柜子全都打开。接着,每数两个柜子关上一个。然后,在第三轮时,再每隔两个就切换第三个柜子的开关状态(也就是将关上的柜子打开,将打开的关上)。照此规律反复操作100次,在第i轮,这个人会每数i个就切换第i个柜子的状态。当第100轮经过走廊时,只切换第100个柜子的开关状态,此时有几个柜子是开着的?
这个问题可以写段程序跑一下来看结果如何
1 #include<iostream> 2 using namespace std; 3 void main() 4 { 5 int a[101]={0}; 6 for(int i=1;i<=100;i++) 7 for(int j=i;j<=100;j++) 8 if(j%i==0) 9 a[j]=(a[j]==0)?1:0; 10 for(int i=1;i<=100;i++) 11 if(a[i]!=0) 12 cout<<i<<" "; 13 }