1. 程式人生 > 其它 >華為機試題目1-10題

華為機試題目1-10題

第三題:明明的隨機數問題,根據題意是將輸入的資料進行去重和排序,明顯是用TreeSet。

第五題:進位制轉換問題。本來打算一點一點寫一個map,進行轉換,發現太過麻煩,上網查後,發現有兩個方法可以直接轉換。

字串s="0xA",十進位制是10;

方法一:Integer.decode(s);即可為10;

decode可以自己分析字串從而輸出對應的10進位制,

如:

8進:010=>分析後為 8

10進:10=>分析後為 10

16進:#10|0X10|0x10=>分析後是 16

方法二:

ss=s.substring(2);

Integer.parseInt(ss,16);也可以得到10,第一行程式碼是將0x去掉,第二行程式碼parseInt第二個引數16,是說明這個ss字串代表的是一個16進位制的數,返回10進位制。

parseInt是解析一個string表示的數的方法,即給一個X進位制的數,返回它的十進位制表示,比如parseInt("Kona", 27) ;返回結果為411787。

第六題:質數因子。自己寫的辦法最後一組一直超時,是因為判斷一個數是不是質數的時候一直從小到大判斷。而實際上我們判斷數num是不是質數時,沒必要從2一直嘗試到num一樣,

此題中的大迴圈也大可不必寫一個到num的迴圈,寫到根號num即可,如果此時數字還沒有除數,則可判定其本身是一個質數,沒有再除下去的必要了。還有一個簡單的方法如下:

可以看出程式碼中只要是因子就直接輸出了,原話中有人回覆是這樣的:(注意,num一直在變小,這就暗含了一個現象或者說理論吧,就是從小到大試:如果一個數已經不能整除2了,

那麼這個數肯定不能整除2的倍數;同理3也一樣,所以整個迴圈能夠保證一旦出現新的因數,其一定就是質數)

第八題:合併表記錄,因為輸出按照key升序輸出,不難想到用TreeMap,但是主要是不知道怎麼遍歷,以及一個關鍵的函式getOrDefault(key,defaultValue);這個函式當Map集合中有這個key時,就使用這個key值;
如果沒有就使用預設值defaultValue。

至於遍歷問題,用foreach遍歷,程式碼如下:

第九題:輸出不重複的整數。我剛開始用的是hashset,但是發現輸出的順序不是插入的順序,上網查了下資料發現輸出的順序是隨機的,要想維護插入順序,需要用LinkedHashSet.