java實現:2018.09.13年晚上七點華為和銳明秋招筆試題
阿新 • • 發佈:2018-11-16
java實現:2018.09.13年晚上七點華為和銳明秋招筆試題
一:華為筆試:
首先是華為是隻有三個程式碼題,第一個是找出字串中最後一個只出現一次的字母(略)。第二題是字串順序顛倒(略)。前面兩個就是簡單的操作資料,最後一個就是關於大數的相乘,比如一個兩個數每個數都20位資料,這種情況下,就只能把int轉化為字元來操作
大數相乘,我們需要把每個數字放到陣列中,然後根據相對原始的計算方式計算:
思路:
程式碼實現如下:
package test20190907; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String str1 = sc.next(); String str2 = sc.next(); StringBuffer resultStr = bigNumFunction(str1, str2); System.out.println(resultStr); } } public static StringBuffer bigNumFunction(String str1, String str2) { char[] arr1 = str1.toCharArray(); // 這裡把字串轉化為字元陣列 char[] arr2 = str2.toCharArray(); int[] arrInt1 = new int[arr1.length];// 下邊定義int陣列來裝上邊的字元陣列中的數值 int[] arrInt2 = new int[arr2.length]; int[] result = new int[arr1.length + arr2.length];// 定義一個int陣列來裝結果 // 下邊的兩個for迴圈分別將上邊的字元陣列轉化為int陣列 for (int i = 0; i < arr1.length; i++) { arrInt1[i] = arr1[i] - '0'; } for (int i = 0; i < arr1.length; i++) { arrInt2[i] = arr2[i] - '0'; } // 首先是求出幾個板塊值 for (int i = 0; i < arr1.length; i++) { for (int j = 0; j < arr2.length; j++) { result[i + j] += arrInt1[i] * arrInt2[j]; } } // 下邊是對我們的結果陣列進行進位制移位處理 for (int i = result.length - 1; i > 0; i--) { if (result[i] / 10 >= 1) { result[i - 1] += result[i] / 10; result[i] = result[i] % 10; } } // 經過移位後,我們陣列中順序就是我們輸出的結果了,我們拼串輸出即可了 StringBuffer sb = new StringBuffer(); for (int i = 0; i < result.length - 1; i++) {// 注意這裡是到result-1 sb.append(result[i]); } return sb; } }
注意:我上邊函式使用了StringBuffer,其實也可以直接使用String,最後拼接的時候,將拼接的數字後邊新增:+“”就可以返回一個String。
控制檯列印:
二:銳明筆試:
銳明筆試,第一個是插入排序演算法。(略)
第二題是統計一個文字檔案中(都是英文單詞),統計每個單詞重複的數量。
package test2018925; import java.io.File; import java.io.FileNotFoundException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Scanner; public class FindWordNum { public static void main(String[] args) throws FileNotFoundException { File file = new File("C:/Users/ASUS/Desktop/word.txt"); Scanner sc = new Scanner(file); StringBuffer sb = new StringBuffer(); Map<String, Integer> map = new HashMap<String, Integer>(); while (sc.hasNextLine()) { String nextLine = sc.nextLine(); System.out.println(nextLine); sb.append(nextLine + " "); // System.out.println(sb); } String str = new String(sb); String[] arr = str.split("\\W+"); for (int i = 0; i < arr.length; i++) { if (map.containsKey(arr[i])) { Integer value = map.get(arr[i]); value++; map.put(arr[i], value); } else { map.put(arr[i], 1); } } Iterator<String> iterator = map.keySet().iterator(); while (iterator.hasNext()) { String key = iterator.next(); System.out.println("單詞" + key + "出現的次數為:" + map.get(key)); } } }
控制檯列印:
這裡可以使用Map來儲存這些單詞,如果發現key有重複的,就就value++;同時這裡要使用到正則表示式,因為我們單詞分隔可以是空格,也可以是一些標點符號。利用正則表示式\w來表示分隔符。
第三題是怎麼實現一個json格式的數行結構,主要是父結點和子結點關係,如果有子結點,就展開(好像是根據state來判斷)
未完,待續。。。。。。