斯倫貝謝軟件筆試經(jīng)驗
一道斯倫貝謝軟件筆試題
軟件, 筆試, 斯倫貝
每個(gè)公司的軟件題目應該都是其在實(shí)際工作當中會(huì )遇到的問(wèn)題,這道斯倫貝謝的算法題我猜測應該也是如此。題目是09屆畢業(yè)生招聘時(shí)出的,如下:
現在一個(gè)廣場(chǎng)上有一些木樁,可以知道這些木樁的坐標。給你一根很長(cháng)的繩子,繞成一圈,將所有木樁都繞在里面。之后收緊繩子,直到其緊繃。此時(shí)有木樁與繩子接觸,另外一些木樁則是在繩子繞成的圈的內部。 我們將與繩子接觸的木樁稱(chēng)作頂點(diǎn),請編寫(xiě)程序,求出這些木樁中的頂點(diǎn)。
這道題目其實(shí)不難,諸位讀者可以思考一下,再看我給的解決方案。另外提醒一下,木樁的坐標是人定的,我們可以將木樁的坐標統一定在第一象限。
以下是這個(gè)問(wèn)題的解答,我只給出算法大體流程,但不給出具體代碼。
我們的輸入是一個(gè)數組,這個(gè)數組中包含所有木樁的坐標,即一個(gè)POINT。
第一步,找出這些點(diǎn)中,位于最下方,即Y坐標值最小的點(diǎn),我們稱(chēng)之為木樁A
我們以A點(diǎn)作為基準點(diǎn)進(jìn)行下一步分析。找出逆時(shí)針?lè )较虻南乱粋(gè)頂點(diǎn)。這個(gè)頂點(diǎn)的尋找方向,必然是先找右上方,如果右上方?jīng)]有點(diǎn),則找左上方。
在右上方,下一個(gè)頂點(diǎn)必然是與A相連,斜率最小的點(diǎn)。如果右上方?jīng)]有點(diǎn),那么我們需要從左上方查找斜率也是最小的一個(gè)點(diǎn)。這一點(diǎn)讀者可以在紙上畫(huà)圖查證。
按照這種方法,我們很容易找到逆時(shí)針的下一個(gè)點(diǎn),我們稱(chēng)之為B點(diǎn),現在從B點(diǎn)查找B點(diǎn)的'逆時(shí)針下一個(gè)頂點(diǎn)。對于B點(diǎn)來(lái)說(shuō),我們也需要先查找右上方,如果右上方?jīng)]有木樁,則查找左上方,左上方?jīng)]有,則需要查找左下方,如果左下方?jīng)]有,那就需要查找右下方。按照此次序依次查找。
對于右上方有木樁的情形,我們需要找到與B點(diǎn)相連斜率最小的木樁。
右上方無(wú)木樁,左上方有木樁的情形,我們需要查找左上方中,與B相連斜率最小的木樁。
對于左下方的情形,我們需要查找與B相連斜率最小的木樁。
對于右下方的情形,我們需要查找與B相連斜率最小的木樁。
雖然都是查找斜率最小,但我們需要依次比較四種情況,而不能混在一起查找。
按照這種方法,我們可以找到C點(diǎn)。
重復由B找到C的步驟,我們可以找到C的逆時(shí)針下一個(gè)頂點(diǎn),依次查找,則可以找出所有頂點(diǎn)。這里還需要注意一點(diǎn),我們需要保存上一次的斜率,本次查找時(shí)的斜率必須比上一次查找時(shí)的斜率大,或者本次查找的下一個(gè)頂點(diǎn)的位置,位于四個(gè)方位中的下一個(gè)方位。
這個(gè)方法很簡(jiǎn)單,但效率很低,每次查找,都需要計算出當前頂點(diǎn)與其他所有點(diǎn)的斜率,并進(jìn)行分類(lèi)排序比較。但目前我只想到這一種方法,如果誰(shuí)有更好的方法,歡迎給我留言 。
【斯倫貝謝軟件筆試經(jīng)驗】相關(guān)文章:
錫伯族貝倫舞種類(lèi)10-06
筆試經(jīng)驗:筆試內容準備09-02
故宮筆試經(jīng)驗05-07
長(cháng)虹筆試經(jīng)驗12-19
銀監會(huì )筆試經(jīng)驗12-18
招商筆試經(jīng)驗12-18
微軟筆試經(jīng)驗03-01
求職筆試經(jīng)驗03-01