QQ羣288567073,無商業廣告,每日干貨電子書+視頻分享
荔枝FM手機客戶端搜索“挨踢脫口秀”即可訂閱我們
視頻彙總首頁:http://edu.51cto.com/lecturer/index/user_id-4626073.html
喝汽水撐死的小明
小明去小賣部買汽水喝,一塊錢一瓶,且喝完兩個空瓶可以換一瓶汽水。現在小明一共有20塊錢,問一共能喝多少瓶汽水?
看完我就想:靠,小明咋沒喝汽水撐死。
不過想完題還是要做的,代碼還是要寫的。其實這題想想也不難,遞歸實現,不斷喝,撐死爲止。
兩行代碼搞定,還是還是可以的嘛。
不過被告知答案錯誤,最後只剩下一瓶的時候,小明還可以找老闆借個空瓶子,兩個空瓶子換一瓶汽水,喝完再把空瓶子還回去嘛。
小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吧,這個能給你面試提供很大的幫助,很大!!!