您的位置:首页 > 职场人生

那些年让你吐血的面试题

2015-11-17 09:47 281 查看


视频汇总首页:http://edu.51cto.com/lecturer/index/user_id-4626073.html

喝汽水撑死的小明

小明去小卖部买汽水喝,一块钱一瓶,且喝完两个空瓶可以换一瓶汽水。现在小明一共有20块钱,问一共能喝多少瓶汽水?
看完我就想:靠,小明咋没喝汽水撑死。
不过想完题还是要做的,代码还是要写的。其实这题想想也不难,递归实现,不断喝,撑死为止。
两行代码搞定,还是还是可以的嘛。
不过被告知答案错误,最后只剩下一瓶的时候,小明还可以找老板借个空瓶子,两个空瓶子换一瓶汽水,喝完再把空瓶子还回去嘛。
小W一口老血。
这还不算关键,最后测试了几组数据,惊奇地发现,答案原来就是:
2N
< 4000 /p>仔细想想,也好解释,我们需要把每个瓶子看成一个独立的单位,当喝完后拿该瓶子和和另外的空瓶一起去换时,可以想象成从别的去来一个空瓶子,换来的汽水喝完后再把空瓶子回去。
这样就相当于每买一瓶都可以喝两瓶,且不会有剩余,最大化利用了,最后的结果就是2n

吐血2.0

什么,上面那题你做过,还是小学!!!
好吧,只能感概现在小学生的题目越来越益(bian)智(tai)了。
那下面来道小学生没做过的吧(不代表小学生不会做哦~)
给你一个数n,让你找出m(m >= 3)个数,使得:a1 - a2 + a3 - a4 + a5 - a6...am = n且前面数是后面数的整数倍(至少2倍),即a1除以任何一个后面的数结果都为一个大于1的整数,依此类推a2,a3...am

例如:99 = 128 - 32 + 4 - 1224 = 256 - 64 + 322 就无法拆分成这样的序列
现在给你一个正整数n,让你构造这样的序列。拿到题了想啊,这题绝壁是化为二进制处理嘛,化成二进制串,搜索加剪枝,搞搞差不多。
但是n = 2(n-1) - (n-1) + 1只要保证 n - 1 > 1,即n > 2都可以这样拆,小于等于2的无解。好吧。

面对这种吐血的题该怎么办

1、很快有想法了不用急着写代码,因为一旦思维定式了很难回来,而且或许你多想两分钟就可以少敲20分钟的代码,更重要的是在面试官的心中的印象分会大大提高;
2、想了会,还是没有巧解的想法,那就赶紧先把最基本的想法写出来,像第一题你先写个递归的也还可以;
3、就是完全没有想法,像第二题,即想不到巧解的办法,又不会写复杂的搜索程序。那这个时候你就危险了,但记住千万不要什么都不做,你可以写个不是完全对的代码,比如这题我可以写个遍历,选择一定的范围一个个尝试。虽然这种做法容易遭到鄙视,但是总比什么不做好,至少向面试官证明你在努力解决问题,这个勇于死磕难题态度很重要。此外,如果你项目经验丰富,或者代码习惯好等等也可以在这时候展示给面试官,或许能从其他方面打动面试官;
4、如果你还是在校生,建议可以看看编程之美之类的书籍,如果你还是大一大二的话,那搞搞ACM吧,这个能给你面试提供很大的帮助,很大!!!

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: