4.15日华为笔试

article/2025/10/11 5:20:21

参考:

  1. 华为笔试,大家做的怎么样?
  2. 华为4.15笔试前两题AC - 正则表达式
  3. 华为笔试2.7 4-15 - C++
  4. 华为4.15笔试 - C++

题目简介:

第一题:求获胜者,如果票数相当,按照字母排序,a>b>c,A>B>C,如果字母相同,则字母少的在前面,比如Luc>Lucy输入:
Tom,Lily,Tom,Lucy,Lucy,Jack
输出:
Lucy
第二题:字符串匹配输入:
read read[addr=0x17,mask=0xff,val=0x7],read_his[addr=0xff,mask=0xff,val=0x1],read[addr=0xf0,mask=0xff,val=0x80]
输出:
0x17 0xff 0x7
0xf0 0xff 0x80

1. 第一题代码:

1. 代码一:(通过率62.5%)

检验输入合法性就可以AC了,首字母大写,后边的字母小写。

import java.util.*;public class Main_1 {public static void main(String[] args) {Scanner sc  = new Scanner(System.in);if(sc.hasNextLine()){String str = sc.nextLine();String s[] = str.split(",");Arrays.sort(s);if(s.length == 1){System.out.println(s[0]);return;}// for(int i = 0; i < s.length; i++)// {//     System.out.print(s[i] + " ");// }// System.out.println();int count = 1;int max = 0;int index = 0;for(int i = 0; i < s.length - 1; i++){if((s[i]).equals(s[i + 1])){count++;                  }else{count = 1;}    if(count > max){max = count;index = i;}}// System.out.println(max);// System.out.println(index);if(count == 1){System.out.println(s[0]);return;}else{System.out.println(s[index]);}}else{System.out.println("error.0001");// System.exit(0);}        }
}// 输入
// 输出// Tom,Lily,Tom,Lucy,Lucy,Jack
// Lucy// Tom,Lily,Tom,Lucy,Lucy,Tom,Jack
// Tom// Tom,Lily,Tom,Lucy,Lucy,Jack,Tom,Tomy,Tomy,Tomy
// Tom// Lily,Lily,Tom,Tom
// Lily

2. 代码二:(AC)

import java.util.*;public class Main_1_2 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str = sc.next();if (!str.matches("([A-Z][a-z]*,)*([A-Z][a-z]*)")) {System.out.println("error.0001");} else {String[] strings = str.split(",");HashMap<String, Integer> map = new HashMap<String, Integer>();int max = 1;for (String s : strings) {map.put(s, map.getOrDefault(s, 0) + 1);max = Math.max(max, map.get(s));}ArrayList<String> arrayList = new ArrayList<String>();for (String s : map.keySet()) {if (map.get(s) == max) {arrayList.add(s);}}// System.out.println(arrayList.toString());arrayList.sort((s1, s2) -> s1.compareTo(s2));// System.out.println(arrayList.toString());System.out.println(arrayList.get(0));}sc.close();}
}// 输入
// 输出// Tom,Lily,Tom,Lucy,Lucy,Jack
// Lucy// Tom,Lily,Tom,Lucy,Lucy,Tom,Jack
// Tom// Tom,Lily,Tom,Lucy,Lucy,Jack,Tom,Tomy,Tomy,Tomy
// Tom// Lily,Lily,Tom,Tom
// Lily

3. 代码三:(AC)

#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;bool cmp(pair<string, int> a, pair<string, int>b)
{if(a.second != b.second){return a.second > b.second;}else{int len  = min(a.first.size(), b.first.size());for(int i = 0; i < len; i++){if(a.first[i] == b.first[i]){continue;}else{return a.first[i] < b.first[i];}}return a.first.size() < b.first.size();}
}int main()
{string s;cin >> s;bool legal = true;string tmp = "";unordered_map<string, int> cnt;for(int i = 0;i < s.length(); i++){if(s[i] == ','){cnt[tmp]++;tmp.clear();}else if(s[i] >= 'a' && s[i] <= 'z'){if(tmp.size() != 0){tmp += s[i];}else{legal = false;break;}}else if(s[i] >= 'A' && s[i] <= 'Z'){if(tmp.size() == 0){tmp += s[i];}else{legal = false;break;}}else{legal = false;break;}}if(legal == false){cout << "error.0001";}else{cnt[tmp]++;vector< pair<string, int> > buf(cnt.begin(), cnt.end());sort(buf.begin(), buf.end(), cmp);cout << buf[0].first << endl;}return 0;
}

2. 第二题代码:

1. 代码一:(较全)

import java.util.*;// 输入1:
// read read[addr=0x17,mask=0xff,val=0x7],read_his[addr=0xff,mask=0xff,val=0x1],read[addr=0xf0,mask=0xff,val=0x80]// 输出1:
// 0x17 0xff 0x7
// 0xf0 0xff 0x80// 输入2:
// read read_his[addr=0xff,mask=0xff,val=0x1]// 输出2:
// FAIL// 思路:
// 先比对最前面那个字符串,然后是三个属性,顺序不能错,然后是数值,必须0x或者0X开头,然后还得有数,以上全通过才行。
// 切分的时候容易弄混,多输出,弄一步输出一下就行。(需要注意检验数值是否十六进制)public class Main_2_1 {public static boolean isHexNumber(String str)   // 判断字符串是否为十六进制数字{boolean flag = true;for(int i = 0; i < str.length(); i++){char c = str.charAt(i);if((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')){continue;                }else{flag = false;break;}}return flag;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNextLine()){String string = sc.nextLine();// System.out.println();string += ',';String a[] = string.split(" ");String key = a[0];String s = a[1];// System.out.println(key + " " + s);String str[] = s.split("],");// for(int i = 0; i < str.length; i++)// {//     System.out.println(str[i]);// }boolean flag = false;for(int i = 0; i < str.length; i++){String sub[] = str[i].split("\\[");// for(int j = 0; j < sub.length; j++)// {//     System.out.print(sub[j] + " ");// }// System.out.println();for(int j = 0; j < sub.length - 1; j++){if((sub[j]).equals(key)){// System.out.println(sub[j + 1]);flag = true;String res[] = sub[j + 1].split("addr=|,mask=|,val=");// System.out.println(res.length);boolean mark = true;for(int k = 1; k < res.length; k++){if((res[k].startsWith("0x") && isHexNumber(res[k].substring(2))) || (res[k].startsWith("0X") && isHexNumber(res[k].substring(2)))){continue;}else{mark = false;}}if(mark == true){for(int k = 1; k < res.length; k++)// k == 0时,res[0]输出的是空格:" ",所以要从k == 1开始输出{if(k != res.length - 1){System.out.print(res[k] + " ");}else{System.out.println(res[k]);}}}else if(mark == false)  //  三个地址中只要有一个不合法,就打印 FAIL{System.out.println("FAIL");}}}}if(flag == false){System.out.println("FAIL");}}sc.close();}
}// read read[addr=0x17,mask=0xff,val=0x7],read_his[addr=0xff,mask=0xff,val=0x1],read[addr=0xf0,mask=0xff,val=0x80]// read read_his[addr=0xff,mask=0xff,val=0x1]// read read[addr=0x17,mask=0xff,val=0z7]// read read[addr=0x17,mask=0xff,val=0xh]// read read[addr=0x17,mask=0xff,val=0xH]

2. 代码二:(AC)

import java.util.*;
import java.util.regex.*;
// import java.util.regex.Matcher;
// import java.util.regex.Pattern;// 输入1:
// read read[addr=0x17,mask=0xff,val=0x7],read_his[addr=0xff,mask=0xff,val=0x1],read[addr=0xf0,mask=0xff,val=0x80]// 输出1:
// 0x17 0xff 0x7
// 0xf0 0xff 0x80// 输入2:
// read read_his[addr=0xff,mask=0xff,val=0x1]// 输出2:
// FAIL// 思路:
// 先比对最前面那个字符串,然后是三个属性,顺序不能错,然后是数值,必须0x或者0X开头,然后还得有数,以上全通过才行。
// 切分的时候容易弄混,多输出,弄一步输出一下就行。(需要注意检验数值是否十六进制)public class Main_2_2 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()){String str = sc.next();Pattern pattern = Pattern.compile(str + "\\[addr=(0[xX][0-9a-fA-F]+),mask=(0[xX][0-9a-fA-F]+),val=(0[xX][0-9a-fA-F]+)\\]?");String[] strings = sc.next().split("],");boolean flag = false;for (String s : strings) {// System.out.println(s);Matcher matcher = pattern.matcher(s);if (matcher.matches()) {flag = true;System.out.println(matcher.group(1) + " " + matcher.group(2) + " " + matcher.group(3));}}if(flag == false){System.out.println("FAIL");}    }sc.close();}
}// read read[addr=0x17,mask=0xff,val=0x7],read_his[addr=0xff,mask=0xff,val=0x1],read[addr=0xf0,mask=0xff,val=0x80]// read read_his[addr=0xff,mask=0xff,val=0x1]// read read[addr=0x17,mask=0xff,val=0z7]// read read[addr=0x17,mask=0xff,val=0xh]// read read[addr=0x17,mask=0xff,val=0xH]

3. 代码三:(通过率67%)

再加上16进制的判断,应该就可以AC了。

// read read[addr=0x17,mask=0xff,val=0x7],read_his[addr=0xff,mask=0xff,val=0x1],read[addr=0xf0,mask=0xff,val=0x80]import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()){String in = sc.next();in = in + "[";String string[] = sc.next().split(",");// System.out.println(string.length);String inArr[] = new String[4];int count  = 0;for(int i = 0; i < string.length - 2; i = i + 3){inArr[0] = string[i].split("addr=")[0];inArr[1] = string[i].split("addr=")[1];inArr[2] = string[i + 1].split("=")[1];inArr[3] = string[i + 2].split("=")[1];inArr[3] = inArr[3].split("\\]")[0];// System.out.println("inArr[0]: " + inArr[0]);// System.out.println("inArr[1]: " + inArr[1]);// System.out.println("inArr[2]: " + inArr[2]);// System.out.println("inArr[3]: " + inArr[3]);if(in.equals(inArr[0])){System.out.print(inArr[1] + " " + inArr[2] + " " + inArr[3] + "\r\n");count++;                    }                // System.out.println();}if(count == 0){System.out.println("FAIL");}}}
}

知识点:

  1. 计算机的十六进制数如何表示?
    十六进制数
    数的表示方法:十进制、二进制、八进制、十六进制等,以及二进制数的运算
  2. java中startsWith与endsWith的用法
    java中startsWith与endsWith的用法
    Java startsWith() 方法
    Java endsWith() 方法
  3. Java substring() 方法
    Java substring() 方法
    java关于substring(a)与substring(a,b)的用法
  4. java 判断字符串是否为数字 十进制 十六进制
    java 判断字符串是否为数字 十进制 十六进制
  5. java分割字符串 Unclosed character class near index 错误
    java分割字符串 Unclosed character class near index 错误
    Java中的坑之方括号
    Unclosed Character Class Error?
    java.util.regex.PatternSyntaxException: Unclosed character class near index 0
  6. Map.getOrDefault()方法
    Map.getOrDefault()方法
  7. Map.keyset() 使用详解
    Map.keyset() 使用详解
    Map集合中value()方法与keySet()、entrySet()区别
  8. arrayList.sort((s1, s2) -> s1.compareTo(s2));的用法
    java中排序函数sort()使用,Arrays.sort()和Collections.sort()
    Java8 - 使用 Comparator.comparing 进行排序
  9. java中判断两个字符串是否相等
    java中判断两个字符串是否相等的问题
    Java compareTo() 方法

吐槽两句:

面向结果编程,学到了。。。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/7UZLxBC5.shtml

相关文章

19.华为笔试题整理

1.两数之和 数组可以有重复元素,所以与力扣的第一题稍微有点不同 public int[] twoSum(int[] numbers, int target) {int n numbers.length;HashMap<Integer, Integer> map new HashMap<>();for (int i 0; i < n; i) {int realTarget target - numbers[i];i…

华为2020校招笔试编程题

华为2020校招笔试编程题 刚做完华为的笔试题&#xff0c;简要描述一下三道编程题的解决方法以及python代码实现 第一题大致描述&#xff1a; 给定两个已经升序排序好的的序列A{a1,a2,a3,...an} 和B{b1,b2,b3...bn} &#xff0c;一个数R&#xff0c;找出满足以下条件的的&#x…

华为笔试题 2022.3.30

1、业务部署芯片 思路&#xff0c;就硬模拟 #include <algorithm> #include <iostream> #include <string> #include <vector>using namespace std;int main() {int m, n;cin >> m;cin >> n;char arr[n];for (int i 0; i < n; i) {ci…

华为2019届校招笔试题

1. 给出一个字符串&#xff0c;将重复的字符去除&#xff0c;仅保留第一次出现的字符&#xff0c;且保持去重后的字符在原字符串中的顺序不变。 输入数据是一个字符串&#xff08;不包含空格&#xff09; 输出去重后的字符串 输入&#xff1a;12ere2 输出&#xff1a;12er…

【JAVA】【华为校园招聘笔试-软件】2020-09-09

前言 华为三道题&#xff0c;100200300&#xff0c;100及格&#xff0c;大家做对第一题就好了&#xff0c;祝大家全都有心仪的offer&#xff0c;不要慌&#xff0c;不要焦虑 一、完美排列——玩具&#xff08;全A&#xff09;&#xff08;注意&#xff1a;题目中说&#xff…

华为2020届逻辑笔试

1、十进制46.25对应的二进制表达式为( )。 A 101110.11 B 101101.01 C 101110.1 D 101110.01 解析&#xff1a; 首先这个题目是由整数部分和小数不同共同组成的&#xff0c;整数部分的计算是最简单的&#xff0c;整数部分除以2得到的余数按照逆向顺序排列后就是整数部分转化为二…

华为笔试

目录 2017年4月21日华为笔试题 圣诞的祝福 2017年4月21日华为笔试题 德州扑克 2017年4月21日华为笔试题 日期的天数序号 2017华为笔试题 任务调度 2017华为笔试题 公司年会 2017华为笔试题 水仙花数 2018华为笔试题 2018华为笔试题2 2017年4月21日华为笔试题 圣诞的祝福…

1.华为实习笔试

第一题(100分) 版本号排序问题,比如1.1.1版本大于1.0.0版本,每个.分割的数字范围是0-256,可以省略,比如..等价于0.0.0,可以有前导0,比如001.001.1等价于1.1.1;程序输入:需要排序的版本号个数,和各个版本号字符串,输出排序后的结果 public static List<String> dealSpli…

find命令用法

一.简介 linux的find命令用于查找指定目录中符合参数条件的文件&#xff0c;如果不设置任何参数&#xff0c;则find命令将在当前路径下查找子目录与文件。并且将查到的子目录和文件全部显示。 二.find命令常用参数 1&#xff09;根据文件名及文件拥有人拥有组查找文件 环境…

Linux下find命令详解

Linux下find命令详解 find命令格式find命令的参数find的常规用法1、按名字查找2、按目录查找3、按权限查找4、按类型查找  &#xff08;b/d/c/p/l/f &#xff09;5、按属主及属组6、按时间查找7、按文件新旧8、按大小查找9、执行命令关于 有没有 -print 的区别 find命令格式 …

java find()_java 之 find 命令

转自&#xff1a;https://blog.csdn.net/holyshit666/article/details/52296966 find命令是比较常用的命令&#xff0c;用来在特定目录下查找具有某种特征的文件。 一&#xff1a;find命令格式如下&#xff1a; find [-path......] -options [-print -exec -ok] path:要查找的目…

find 命令常用用法

find 命令——文件或目录查找而且可以直接对查找结果使用命令。 find 查找范围 查找条件 -name 按名称查找 -maxdepth 查看多深的文件&#xff0c;不能超过所限制的目录下的内容 -mindepth 查看不小于多深的文件&#xff0c;不低于所限制内容…

文件查找find命令

#!/bin/bash find /etc -name *.conf find /etc -iname "aa" #不区分大小写 find . -user hdfs find . -group yarn find /etc -type f #文件 find /etc -type d #路径 find /etc -size 1M #文件大小大于1M find /etc -size -100k #文件大小小…

Linux find命令详解

基础打印操作 find命令默认接的命令是-print&#xff0c;它默认以\n将找到的文件分隔。可以使用-print0来使用\0分隔&#xff0c;这样就不会分行了。但是一定要注意&#xff0c;-print0针对的是\n转\0&#xff0c;如果查找的文件名本身就含有空格&#xff0c;则find后-print0仍…

Linux 的find命令用法

摘要 find 是Unix/Linux命令行工具箱中最棒的工具之一。该命令在命令行和shell脚本编写方面都 能发挥功效。find 包含大量特性&#xff0c;本文记录find 的一些常用的查找功能。 find 命令的工作方式如下&#xff1a;沿着文件层次结构向下遍历&#xff0c;匹配符合条件的文件&…

linux find命令格式及find命令详解

本文详细介绍了linux find命令格式及find命令案例&#xff0c;希望对您的学习有所帮助。1、find命令的一般形式为&#xff1b; find pathname -options [-print -exec -ok ...]2、find命令的参数&#xff1b; pathname: find命令所查找的目录路径。例如用.来表示当前目录&#…

Windows命令之find命令

一、命令简介 find 命令用于查找文档中的特定字符和数字及行号, 好比, 我们在阅读文档时, 使用的快捷键 Ctrl F 来查找是一个效果, 经过 find 查找的字符也可以重定向到一个文本文档里面去, 提取特定的字符, 来进行文档的整合。 二、使用示例 1、获取命令帮助 使用 find /?…

linux find命令

一、find命令语法格式&#xff1a; find [路径] [选项] [操作] 选项参数对照表&#xff1a; 三、常用选项 -name  查找 /etc 目录下以 conf 结尾的文件&#xff0c;文件名区分大小写&#xff0c;例如&#xff1a;find /etc -name *.conf -iname 查找当前目录下所有文件名…

find命令之exec

find命令结合exec find命令之exec find命令结合exec find命令结合execexecexec参数说明使用实例1. 查找当前目录下的文件&#xff0c;并对查找结果执行ls -l 命令2. 查找当前目录下&#xff0c;24小时内更改过的文件&#xff0c;并进行删除操作&#xff08;慎用&#xff01;&a…

Find 命令详解

find命令详解 命令语法格式&#xff1a;find查找路径查找条件信息 查找路径是指查找范围&#xff0c;使用该命令时需要指定一个范围&#xff0c;在该范围内查找。 查找条件分类&#xff1a; ①按文件名称查找 -name文件名称 ②按文件类型查找 &#xff08;文件类型又分为普通…