【面試題】求妹子的星座【分析】
前兩天發出去的面試題收到了很多回復,總結一下吧。
首先是解題思路。
留言說「一三五七八十臘」的朋友,恭喜你們可以早早回家吃飯了。既然提了這樣的問題,顯然解答的過程是至少需要一點點數學知識的,如果你發現完全不用編程就能找到答案,一定是自己想的方向錯了,那就千萬不要把這個不成熟的小想法說出口。
至於說百度一下,或者說找找身份證規律就好之類的,這離我們得到正確答案還有99%的路程要走,是沒有任何價值的答案。
其實大家多少應該知道身份證號帶有著戶口所在地,出生日期,性別等信息,那究竟規律是怎麼樣的,非常容易搜到。
回答百度一下編號規則,然後按規則驗算的朋友,顯然是低估了編碼的工作量,回想一下,是不是你在日常工作中,經常無法準確排期?
通過百度可以找到
將前面的身份證號碼17位數分別乘以不同的係數。從第一位到第十七位的係數分別為:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
這個規則,現在問題來了,這個係數是怎麼來的?
我比較希望得到的答案是這份文檔
在任何時候都不要把百度百科上的內容作為參考資料,這是在大學辯論隊的時候就應該知道的常識。
如果你找到的是這份資料,那麼在最終給出的答案裡面,應該就不會出現枚舉的係數。可惜的是,至今看到的所有答案都是枚舉係數,沒有計算係數的答案。
當知道計算方法之後,就可以開始編碼了。
很意外的是,好幾位同學都用 vue 給出了答案。這裡其實給出原生 js 的答案更好一些,不然我可能會覺得你是不是對 vue 依賴太強了,你是一個 vue 工程師。
通過標準給出的公式,我們可以建立一個二元一次方程,因為有兩個未知數,但是只有一個算式,所以理論上可能解不唯一。
一種思路是循環嘗試所有情況,反正也就是十二種對吧,大多數同學也都是這麼做的。
另外一個思路:可以預設第十位是0或者1,轉化為一元一次方程,但這時候你發現,這並不是一個一元一次方程,比如這道題目,當我們預設第十位是0,得到的應該是這樣一個關係:
9x ≡ 3 (mod 11)
這是一個線性同餘方程,解法是這樣的,利用擴展歐幾里得演算法可以得到一個解,我們再通過同餘取得是否存在我們求解區間內的可用解。
這就是為什麼我說這道題可能不太適合現場面試,因為要查閱這些資料還是需要花一點時間的。我並不預設面試者了解什麼是擴展歐幾里得演算法,甚至不指望他知道身份證的驗證碼規律。事實上,我們工作中遇到的很多問題就是這樣的,解決這個問題所需要的知識並不在你的知識儲備中,但是你可以在短時間內找到正確的資料,並且理解資料,最終形成解決方案。
同時,考慮到工程實施的成本,比如這道題,我們是否有必要用這個方法去求解,還是簡單的做十二次遍歷就好。我會傾向於直接做遍歷,因為沒有必要用複雜演算法去求解,除非你確定日後維護的同事也都了解這一套數學理論。
能夠以正確的方式探索問題答案,以及敢於直面未知的知識,都是面試官所看重的能力。這比寫在簡歷中的「動手能力強,熱愛編程」,要有意義得多。
還有想提交答案的同學可以根據上面的資料繼續打磨代碼,我滴的招聘廣告到年底前一直有效,快給我一個勾搭你的機會吧。
推薦閱讀:
※一些文秘面試問題?
※面試官提問的問題「我們產品沒有優勢,價格比對手高,這種產品如何向客戶推薦?」
※那些事情真的如我們所想那樣簡單嗎
※為什麼現在的HR凈問一些傻問題?
※做一點什麼,才能在面試的時候腦子不空,能夠隨機應變?