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来判断)
未完,待续。。。。。。