6.2 筆試真題 & 詳解
第三題是約瑟夫(Joseph)環(huán)問題,一看很高興啊。以前在Poj上做過,而且在Baidu比賽還做過變種的約瑟夫問題。很順利的寫了出來,給出遞歸和循環(huán)兩種解決方法。第四題給出一個PI/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 ……的公式要求寫一個求PI的程序精確到小數(shù)點后500位。按這個要求應(yīng)該是讓自己寫個數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)高精度。在我看來在考試期間完成是 mission impossible。 第五題是挖石油的放棄了。
真題二:今天去斯倫貝謝BGC參加筆試,感覺BGC并不太考技術(shù)細節(jié),側(cè)重考察思維能力和英語表達能力。一道設(shè)計題,一道名詞解釋題,一道算法題,一道智力題,一道跟石油相關(guān)的半開放問題,好壞不知。
真題三:筆試在9點半。試題比較有意思,最后一題讓設(shè)計一個海底甲烷水合物開采方案,我想到用循環(huán)熱水管道,在海底把固體礦物質(zhì)加熱使甲烷逸出,甲烷再隨著水循環(huán)上升到海面上。對于這個創(chuàng)意我自己還比較得意,但估計人家看了就覺得可笑了。
真題四:斯倫貝謝軟件筆試題
每個公司的軟件題目應(yīng)該都是其在實際工作當(dāng)中會遇到的問題,這道斯倫貝謝的算法題我猜測應(yīng)該也是如此。題目是09屆畢業(yè)生招聘時出的,如下:
現(xiàn)在一個廣場上有一些木樁,可以知道這些木樁的坐標(biāo)。給你一根很長的繩子,繞成一圈,將所有木樁都繞在里面。之后收緊繩子,直到其緊繃。此時有木樁與繩子接觸,另外一些木樁則是在繩子繞成的圈的內(nèi)部。 我們將與繩子接觸的木樁稱作頂點,請編寫程序,求出這些木樁中的頂點。
這道題目其實不難,諸位讀者可以思考一下,再看我給的解決方案。另外提醒一下,木樁的坐標(biāo)是人定的,我們可以將木樁的坐標(biāo)統(tǒng)一定在第一象限。
以下是這個問題的解答,我只給出算法大體流程,但不給出具體代碼。
我們的輸入是一個數(shù)組,這個數(shù)組中包含所有木樁的坐標(biāo),即一個POINT。
第一步,找出這些點中,位于最下方,即Y坐標(biāo)值最小的點,我們稱之為木樁A
我們以A點作為基準(zhǔn)點進行下一步分析。找出逆時針方向的下一個頂點。這個頂點的尋找方向,必然是先找右上方,如果右上方?jīng)]有點,則找左上方。
在右上方,下一個頂點必然是與A相連,斜率最小的點。如果右上方?jīng)]有點,那么我們需要從左上方查找斜率也是最小的一個點。這一點讀者可以在紙上畫圖查證。
按照這種方法,我們很容易找到逆時針的下一個點,我們稱之為B點,現(xiàn)在從B點查找B點的逆時針下一個頂點。對于B點來說,我們也需要先查找右上方,如果右上方?jīng)]有木樁,則查找左上方,左上方?jīng)]有,則需要查找左下方,如果左下方?jīng)]有,那就需要查找右下方。按照此次序依次查找。
對于右上方有木樁的情形,我們需要找到與B點相連斜率最小的木樁。
右上方無木樁,左上方有木樁的情形,我們需要查找左上方中,與B相連斜率最小的木樁。
對于左下方的情形,我們需要查找與B相連斜率最小的木樁。
對于右下方的情形,我們需要查找與B相連斜率最小的木樁。
雖然都是查找斜率最小,但我們需要依次比較四種情況,而不能混在一起查找。
按照這種方法,我們可以找到C點。
重復(fù)由B找到C的步驟,我們可以找到C的逆時針下一個頂點,依次查找,則可以找出所有頂點。這里還需要注意一點,我們需要保存上一次的斜率,本次查找時的斜率必須比上一次查找時的斜率大,或者本次查找的下一個頂點的位置,位于四個方位中的下一個方位。
這個方法很簡單,但效率很低,每次查找,都需要計算出當(dāng)前頂點與其他所有點的斜率,并進行分類排序比較。