螞蟻爬桿問題分析

2021-05-08 19:35:05 字數 2236 閱讀 6629

題目:

讀完這道題以後,我的想法是:

最短時間考慮如下:

首先標出木桿的中點,即在(0+27)/2=13.5厘公尺處。然後所有的螞蟻都沿著木桿向離自己較近的一端走,這樣所有螞蟻都離開木桿的時間是最短的,即,為距離木桿中點最近的螞蟻走向離它最近一端所用的時間。所以此題為11s。

<——                             ——>

|________________|________________|

0                            13.5                          27   

最長時間考慮如下:

要計算最長時間,就應該使最中間的那只螞蟻盡量在木桿上來回走動。

情況1:

處在最中間的這只螞蟻向右走,而所有其他螞蟻都向木桿的中間方向走。這樣最中間這只螞蟻總共會調換4次方向,最後的方向仍然向是向右。經過計算,可知,中間螞蟻的最後一次相遇是在13厘公尺處,而且前面總共走了3+2+3+2=10厘公尺,所以中間螞蟻最後走出木桿總共走的距離為:10+(27-13)=24厘公尺,即,所用螞蟻走出木桿所用時間為24s。

—>           

|________________|________________|

0                   11      13.5                         27   

情況2:

處在最中間的這只螞蟻向左走,而所有其他螞蟻都向木桿的中間方向走。這樣最中間這只螞蟻總共會調換4次方向,最後的方向仍然向是向左。經過計算,可知,中間螞蟻的最後一次相遇也是在13厘公尺處(這是巧合),而且前面總共走了2+3+2+3=10厘公尺,所以中間螞蟻最後走出木桿總共走的距離為:10+(13-0)=23厘公尺,即,所用螞蟻走出木桿所用時間為23s。

<—     

|________________|________________|

0                   11     13.5                          27  

通過比較發現,處在最中間的這只螞蟻向右走,而所有其他螞蟻都向木桿的中間方向走,這種情況計算出的時間是最長的。

但是這樣的計算是費時又費力的,是否還有更好的方法?

我們將此問題化簡一下:

化簡情況1:

木桿上只有乙隻螞蟻,不妨設,它處在3厘公尺處。那麼,

這只螞蟻走出木桿的最短距離應該為3厘公尺,即用時3s。

這只螞蟻走出木桿的最長距離應該為27-3=24厘公尺,即用時24s。

|________________|________________|

0    3                      13.5                          27  

化簡情況2:

木桿上只有兩隻螞蟻,不妨設,它們分別處在3厘公尺處和11厘公尺處。那麼,由於每只螞蟻有兩種可能(可以選擇向右或向左),所以,這種情況總共有2^2=4種可能:都向右、都向左、乙個向左乙個向右、乙個向右乙個向左。我們只考慮相遇的情況。

這兩隻螞蟻將會在(3+11)/2=7處相遇,不難計算得:

處在11厘公尺處的這只螞蟻走出木桿的距離為4+(27-7)=24厘公尺,即用時24s。

處在3厘公尺處的這只螞蟻走出木桿的距離為4+(7-0)=11厘公尺,即用時11s。

—>           <—      

|________________|________________|

0    3              11    13.5                             27  

我們可以發現,處在11厘公尺處的這只螞蟻所走的距離可以轉化為處在3厘公尺處的這只螞蟻直接走向右端的距離(27-3=24)。

如果我們認真分析一下就能夠發現,其實要計算所有螞蟻走出木桿的時間,可以轉化為計算處在離木桿一端最近的那只螞蟻走向另一端所用的時間。

針對上面那道面試題,要計算最長時間,就可以根據這個結論直接得出答案:27-3=24厘公尺,即,用24s。

綜上所述:

最短時間肯定是11s,位於11厘公尺處的螞蟻怎麼都不可能在低於11s的時間內離開木桿。

最長時間是24s,是位於3厘公尺處的螞蟻從木桿的27cm處爬出。

結論是:不管木桿有多長,有多少只螞蟻,最長的永遠是(木桿長度-最靠近木桿邊緣的螞蟻的位置),最短的永遠是(木桿最中間的螞蟻的位置)。

程式設計實現如下:

螞蟻爬桿問題

問題描述 有一根27厘公尺長的細木桿,在第3厘公尺,7厘公尺,11厘公尺,17厘公尺,23厘公尺這五個位置上各有乙隻螞蟻,木桿很細,不能同時通過兩隻螞蟻,開始時,螞蟻的頭朝向左還是右是任意的,他們只會朝前走或掉頭,但不會後退,當兩隻螞蟻相遇後,螞蟻會同時掉頭朝反方向走,假設螞蟻們每秒鐘可以走1厘公尺...

螞蟻爬桿問題

告訴你有乙個長為l l 10000 的木桿,上面有n n 1000 個螞蟻,他們一開始的朝向隨機,他們會以一定的速度一直向當前方向走,直到兩隻螞蟻相遇,他們會立即掉頭 即往相反方向走 計算t秒後螞蟻的位置 輸入的第一行為陣列個數,每組陣列第一行為三個正整數,l,t,n,分別表示長度,時間,螞蟻個數。...

java螞蟻爬桿

ant private void setmaxtime maxtime maxnearsideposition.divide speed public bigdecimal getmaxtime private void setmintime bigdecimal anotherhalflength...