1. 程式人生 > >java實現:2018.09.13年晚上七點華為和銳明秋招筆試題

java實現:2018.09.13年晚上七點華為和銳明秋招筆試題

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來判斷)

未完,待續。。。。。。