前兩天有群友在說,去華為面試的時候遇到了機試部分,但是沒有提前做準備,導致涼涼了,所以小編連忙準備了一些各大廠的機試題,以便不時之需。
一:字串最後一個單詞的長度:
題目:輸入為數個單詞,以空格隔開;要求輸出最後一個單詞的長度。
思路:讀入字串,求出字串具體長度l,然後指標從後往前直到指向空格,記錄此時的下標i,則最後一個字串的長度為l+1-i
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
二:計算字元個數
題目:寫出一個程式,接受一個由字母和數位組成的字串,和一個字元,然後輸出輸入字串中含有該字元的個數。不區分大小寫。
思路:注意到不區分大小寫,查詢ASCII碼得知,大寫字母與小寫字母相差32(如A其值為65,而a其值為97,其他類推),所以便利陣列時,查詢條件除了s[i]==a還要加上「或(s[i]+32)==a或(s[i]-32)==a"
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
三:明明的亂數
題目:實際上就是輸入多行資料,第一個為該行個數,剩下的是資料(注意是迴圈輸入)要求將輸入的資料排序去重(注意到數值在0到1000,而且都是整數。
思路:由於輸入的都是整數且有範圍限制,所以最多的輸出就是從0到1000全輸出,所以申請一個a[1001]已經足夠,譬如輸入7則a[7]==1,然後輸出時便利標記陣列,為一的輸出陣列下標即可。
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
四:字串分割
題目:連續輸入字串,請按長度為8拆分每個字串後輸出到新的字串陣列;
•長度不是8整數倍的字串請在後面補數位0,空字串不處理。只輸入兩次。
思路:由於固定給出2次,運用函數思想,寫出字串分割函數呼叫兩次即可,注意到函數用到了遞迴的思想。
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
五:進位制轉換
題目:寫出一個程式,接受一個十六進位制的數,輸出該數值的十進位制表示。(多組同時輸入 )
思路:直接呼叫系統函數即可
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 |
|
六:質數因子
題目:要求輸入long 型整數,從小到大輸出其址因子
思路:從2開始,反覆取餘,如果為0,代表2是其因子,但注意到除2以後仍可能被2整除,故2不變;若不為0,需要將2加一變為3,進入下個迴圈。
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
七:取近似值
題目:寫出一個程式,接受一個正浮點數值,輸出該數值的近似整數值。如果小數點後數值大於等於5,向上取整;小於5,則向下取整。
思路:加上0.5後取整即可
程式碼如下:
1 2 3 4 5 6 7 8 9 |
|
八:合併表記錄
題目:資料表記錄包含表索引和數值(int範圍的整數),請對錶索引相同的記錄進行合併,即將相同索引的數值進行求和運算,輸出按照key值升序進行輸出
思路:由於測試用例不超過1000,故可以延續」明明的亂數「的思路,申請一個長度為1000的陣列,但注意到一旦輸入key值相同則將value 累加到a[key],隨後遍歷輸出即可
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
九:提取不重複的整數
題目:輸入一個int型整數,按照從右向左的閱讀順序,返回一個不含重複數位的新的整數。
思路:整數只有10個,開闢一個長度為10 的標記陣列,初始化為0,每次進行判斷,第一次肯定不重複為零,然後將標記加一,隨後每次判斷,若標記不為零,代表以經重複,不累加計算。
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
十:字元個數統計
題目:編寫一個函數,計算字串中含有的不同字元的個數。字元在ACSII碼範圍內(0~127),換行表示結束符,不算在字元裡。不在範圍內的不作統計。
思路:仍然延續前面的思路,開闢一個長度為128 的標記陣列,隨後累加標記值不為一的個數即可。
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
十一:數位顛倒
題目:輸入一個整數,將這個整數以字串的形式逆序輸出
程式不考慮負數的情況,若數位含有0,則逆序形式也含有0,如輸入為100,則輸出為001
思路:呼叫系統函數,注意要參照algorithm庫
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
十二:字串反轉
題目:寫出一個程式,接受一個字串,然後輸出該字串反轉後的字串。(字串長度不超過1000)
思路:呼叫系統函數即可
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 |
|
十三:句子逆序
題目:將一個英文語句以單詞為單位逆序排放。例如「I am a boy」,逆序排放後為「boy a am I」
所有單詞之間用一個空格隔開,語句中除了英文字母外,不再包含其他字元
思路:類同11,12,不過是型別換位了string型別,我們呼叫容器即可。注意到用空格隔開,而最後一個字元后沒有空格。
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
十四:字串的連結最長路徑查詢
題目:給定n個字串,請對n個字串按照字典序排列。輸入第一行為一個整數記錄數位個數,第二行為資料。
思路:仍然是呼叫系統函數進行排序,主要是正確使用容器即可。先將輸入的字串裝入容器,利用系統函數排序,我們可以將程式碼中的vector<string>::iterator p中的p 視為指標指向每一個字串,隨後順序輸出即可
程式碼如下:</string>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
十五:求int型整數在記憶體中儲存時1的個數
題目:輸入一個int型的正整數,計算出該int型資料在記憶體中儲存時1的個數。
思路:記憶體中的數都是0101即二進位制,我們將其轉換成二進位制即可,」除2取餘,倒序排序,高位補零「但我們不用這麼麻煩,每次取餘不為零時可知二進位制中必有1,此時計數即可。
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
做了那麼多題,每一個題都有不同的解決方案,更重要的還是思路,多想多做,加油!
小編還整理了更多JAVA面試題:戳這裡免費領取,暗號:CSDN,還有更多大廠面試專題資料和視訊哦!
寫文不易,覺得有幫助還請點贊關注支援一下小編,也歡迎各位大佬提出問題,感謝!!!