1. 一台机器只有整数,只能执行 +1, 循环,赋值 指令,如何实现 加法,减法,乘法,除法。
百度的笔试题,加法大家都会,乘法在加法的基础上好做,除法在减法基础上也可以实现。可是如何实现减法,没有比较操作。
2. 两个单链表有交叉,求交叉结点
如果两个单链表等长,很好做,从头结点,顺序比较,每个都后移一个结点,知道两个相等结点即可。
如果不等长呢?如何比较?思维向着这个方向去了,O(n*m)的循环?
3. 过桥的问题,桥尾的收费员睡5分钟,醒5分钟,过桥要10分钟,钱不够如何过桥。
4. 烧绳子计时的问题,绳子不均匀,烧完要1小时,如何计半小时。
5. 25匹马在5赛道的场上,用最少场次找出前1,2,3名的马。
6. 两个鸡蛋在一百层的楼上找出,使鸡蛋摔破的最低层。最多多少次。
5.6 两个问题不算思维灵活性,不是那种简单变通就可以解决的,有点创新+逻辑。
答案:
1. 一个简单的逆向思维的问题,a+1=b ,那么a=b-1
fun(a-b)
{
n=a;
for(b次)
{
t=0;
for(n次)
{
p=t;
t=t+1;
}
//这里p=n-1
n=p;
}
return p;
}
先实现 a-1 再循环b 次。
问题,只知道往+的方向想,但是没有比较指令。
2. 其实先找出两个链表长度,长的链表先走几个结点,从等长地方开始比较,化成等长问题了。
3. 走一半,待收费员快醒,转身往回走。被收费员赶到桥另一端。这个算是挖掘一些隐藏逻辑。不完全是灵活变通。
4. 烧绳计时的问题,从两端同时点燃。一个老套的笔试题。也不懂变通。还有烧出45分钟,1小时15分钟,一根绳子两头点燃,另一根一头点燃,第一根绳子烧完后点燃另一端等等。
5. 分5组先比。然后找各组第3名开始比一轮(记为第2轮)。不知道自己为什么要找第3名,其实第1名就可以了,然后找第2轮最优所在组2,3,次优马所在组2,第2轮第3名的马,PK一次就可以了。
6. 傻乎乎的居然2层一试,选49次。同学还列出了方程,第一次从0开始往上数n层,扔鸡蛋,如果破,再从第0层一层层试另一个鸡蛋。最多n次。如果不破,从n层往上上n-1层,试第一个鸡蛋,因为已经用了1次,类似上面做法,最多经过n次也能试出来。依次类推,直到再网上到n-(n-1) =1 到了100层。也就是 1+2+...+n=100 n(n+1)/2>=100 n=14.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/38085/viewspace-1013202/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/38085/viewspace-1013202/