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来判断)

未完,待续。。。。。。

猜你喜欢

转载自blog.csdn.net/Handsome2013/article/details/82670827