那些年让你吐血的面试题

QQ群288567073,无商业广告,每日干货电子书+视频分享

荔枝FM手机客户端搜索“挨踢脱口秀”即可订阅我们

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

喝汽水撑死的小明

小明去小卖部买汽水喝,一块钱一瓶,且喝完两个空瓶可以换一瓶汽水。现在小明一共有20块钱,问一共能喝多少瓶汽水?


看完我就想:靠,小明咋没喝汽水撑死。


不过想完题还是要做的,代码还是要写的。其实这题想想也不难,递归实现,不断喝,撑死为止。


wKiom1ZKhq_jGjvLAAGCvye_bhk866.png

两行代码搞定,还是还是可以的嘛。


不过被告知答案错误,最后只剩下一瓶的时候,小明还可以找老板借个空瓶子,两个空瓶子换一瓶汽水,喝完再把空瓶子还回去嘛。


小W一口老血。


这还不算关键,最后测试了几组数据,惊奇地发现,答案原来就是:


2N


仔细想想,也好解释,我们需要把每个瓶子看成一个独立的单位,当喝完后拿该瓶子和和另外的空瓶一起去换时,可以想象成从别的去来一个空瓶子,换来的汽水喝完后再把空瓶子回去。


这样就相当于每买一瓶都可以喝两瓶,且不会有剩余,最大化利用了,最后的结果就是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 - 1

224 = 256 - 64 + 32

2 就无法拆分成这样的序列


现在给你一个正整数n,让你构造这样的序列。

拿到题了想啊,这题绝壁是化为二进制处理嘛,化成二进制串,搜索加剪枝,搞搞差不多。


但是

n = 2(n-1) - (n-1) + 1

只要保证 n - 1 > 1,即n > 2都可以这样拆,小于等于2的无解。

好吧。

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

1、很快有想法了不用急着写代码,因为一旦思维定式了很难回来,而且或许你多想两分钟就可以少敲20分钟的代码,更重要的是在面试官的心中的印象分会大大提高;


2、想了会,还是没有巧解的想法,那就赶紧先把本的想法写出来,像第一题你先写个递归的也还可以;


3、就是完全没有想法,像第二题,即想不到巧解的办法,又不会写复杂的搜索程序。那这个时候你就危险了,但记住千万不要什么都不做,你可以写个不是完全对的代码,比如这题我可以写个遍历,选择一定的范围一个个尝试。虽然这种做法容易遭到鄙视,但是总比什么不做好,至少向面试官证明你在努力解决问题,这个勇于死磕难题态度很重要。此外,如果你项目经验丰富,或者代码习惯好等等也可以在这时候展示给面试官,或许能从其他方面打动面试官;


4、如果你还是在校生,建议可以看看编程之美之类的书籍,如果你还是大一大二的话,那搞搞ACM吧,这个能给你面试提供很大的帮助,很大!!!

wKioL1ZKiDfQwtaNAAC7xM3r2nY437.jpg

你可能感兴趣的:(小卖部,小学生,一瓶,汽水)