1. 程式人生 > >u014108122的專欄

u014108122的專欄

1. A、B兩個人輪流往一張大圓桌上放硬幣,硬幣不能出桌子界,不能重複,直到最後一個人沒地方放下一塊硬幣則遊戲結束,沒地方放硬幣的那個人輸了;A先放,請問A按照怎樣的策略可以保證總是A獲勝。

   解答:A首先在圓桌的正中心放一枚硬幣,然後B開始放,A每次在B對稱的地方放硬幣,這樣可以保證最後能放的硬幣總數是奇數

2. 有4個人A、B、C、D過獨木橋,4個人過去速度快慢不一,A需要1分鐘,B需要2分鐘,C需要5分鐘,D需要10分鐘,現在只有一盞照明燈,而且獨木橋每次最多隻能過2個人,

過去的時間取決於最慢的那個人,請問過橋最短時間

   解答:最短時間17分鐘。策略如下:AB先過去一趟2分鐘,然後A帶著燈回來1分鐘,CD再帶著燈過去10分鐘,B再帶著燈回來2分鐘,AB再一起過去2分鐘,總共17分鐘。

3.有一個字元陣列如 “I come from China”,現在需要把字串按單詞順序反轉,即變成 “China from come I”, 請找出最節省記憶體的方式

   解答:先把整個字串反轉變成 “anihC morf emoc I”, 再針對反轉後的字串把每個單詞反轉變成 “China from come I”即可

4.有一個很大的byte陣列,現在要算出所有byte位元組包含的1的位的總數目,最快的求解方法

  eg: byte[] aa = {(byte)1,(byte)3} 就是00000001、 00000011總共3個為1的位。

  解答:在記憶體中生成一個256大小的陣列,數組裡面每個元素的內容即為陣列對應的索引包含的1的位的數目,生成這樣一個byte陣列以後,接下來計算所有的1的總數,遍歷整個               byte陣列,以每個元素為索引,找到之前生成的byte陣列中的元素的值,即為這個byte包含的1的個數,累加即可得。

5.單鏈表找環。

   解答:這個問題在網路路由上經常遇到的非常經典的問題, 可以用2個指標,一個指標一次性前進2步,一個指標一次性前進1步,這樣2步的指標每次比一步的指標多出來一步,                  只要存在環,則2步的指標必然會與1步的指標相遇,此時剛好比1步的指標多走一圈(每次比一步的指標多出來一步)