当前位置: 首页 > news >正文

华为OD机试真题 新系统 - 准备生日礼物 (Java/Py/C/C++/Js/Go)

准备生日礼物

2026 华为OD机试真题 4月8日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

小明在一个充满人文关怀的公司上班,公司每个月都要为该月生日的同事送一份生日小礼物,该事项由小明负责,请帮助小明统计某一月份应该准备多少礼物,重复录入的员工生日以最后一次录入结果为准,请不要重复统计,避免浪费。

输入描述

参数 1,要发放礼物的月份,取值 1 到 12。

参数 2,员工列表。

参数 3,员工生日日期列表,该列表和员工列表中的数据对应存在一一对应关系,长度一致。

补充说明

  1. 小明公司的员工人数不超过 100人。
  2. 员工姓名是字母和数字的组合,姓名长度大于 0,小于 16字节。
  3. 日期录入格式统一采用 Year/Month/Day ,Year 长度为 4,Month和 Day 长度为 11 到 22,系统保证录入日期为合法日期。
  4. 不考虑同名多位员工的情况,名字一致即可认为是同一员工(在生产系统会通过工号区分,本系统简化处理)。

输出描述

该月份要准备的礼品个数。

示例1

输入

5 Alice Bob Charlie David Eve Frank Grace Helen 1985/5/10 1990/10/11 1995/10/11 2000/11/10 2005/05/01 2010/10/13 2015/10/14 2020/5/2

输出

3

说明

在 5 月份出生的员工有 3 人 ,因此返回为 3 。

示例2

输入

10 Alice Bob Charlie David Eve Frank Grace Helen 1985/05/10 1990/10/11 1995/10/11 2000/11/10 2005/10/13 2010/10/13 2015/10/14 2020/10/15

输出

6

说明

10 月份出生的员工有 6 人,因此返回 6 。

示例3

输入

5 Alice Bob Charlie Alice Eve Frank Grace Helen 1985/5/10 1990/10/11 1995/10/11 1985/7/10 2005/05/01 2010/10/13 2015/10/14 2020/5/2

输出

2

说明

5 月份出生的员工有 2 个,因此返回 2。

说明:Alice重复录入了,第一次录入出生月份为 5 月,第二次录入出生月份为 7 月,因此 Alice不被统计到 5月份。

解题思路

核心思想

本题是一道简单的字符串解析与哈希表(或者字典)应用题。主要逻辑如下:

  1. 输入解析:依次读取目标月份、员工姓名列表、员工生日列表。
  2. 去重与更新:题目要求“重复录入的员工生日以最后一次录入结果为准”。我们可以利用哈希表(字典)存储员工的姓名和对应的生日。顺序遍历姓名和生日列表,将姓名作为键,生日作为值存入字典。由于是按顺序处理,后出现的同名员工会自动覆盖前面的记录,从而天然满足题意。
  3. 统计结果:遍历字典中的所有生日,将其按/分割,提取出月份部分。如果该月份等于目标月份,则将计数器加一。
  4. 输出结果:最后输出计数器的值。

复杂度分析

  • 时间复杂度O ( N ) O(N)O(N),其中N NN是员工的人数。我们需要遍历员工列表将其存入哈希表,然后再遍历哈希表进行月份匹配,两次遍历的时间复杂度均为O ( N ) O(N)O(N)
  • 空间复杂度O ( N ) O(N)O(N),使用哈希表存储每个员工的姓名和生日,最坏情况下没有重复员工,哈希表大小为N NN

Java

importjava.util.HashMap;importjava.util.Map;importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);// 读取目标月份if(!scanner.hasNextInt())return;inttargetMonth=scanner.nextInt();scanner.nextLine();// 消耗换行符// 读取员工列表和生日列表String[]names=scanner.nextLine().split(" ");String[]birthdays=scanner.nextLine().split(" ");// 使用 HashMap 存储员工姓名和生日,自动处理重复覆盖Map<String,String>employeeMap=newHashMap<>();for(inti=0;i<names.length;i++){employeeMap.put(names[i],birthdays[i]);}intcount=0;// 遍历所有去重后的员工生日for(Stringbirthday:employeeMap.values()){String[]parts=birthday.split("/");if(parts.length>=2){// 提取月份并转换为整数比较intmonth=Integer.parseInt(parts[1]);if(month==targetMonth){count++;}}}// 输出结果System.out.println(count);scanner.close();}}

Python

importsysdefmain():# 读取所有输入行并去除两端空白input_data=sys.stdin.read().splitlines()iflen(input_data)<3:return# 目标月份target_month=int(input_data[0].strip())# 员工姓名列表names=input_data[1].strip().split()# 员工生日列表birthdays=input_data[2].strip().split()# 字典自动去重,后出现的覆盖前面的employee_dict={}foriinrange(len(names)):employee_dict[names[i]]=birthdays[i]count=0# 遍历字典的值统计匹配的月份forbinemployee_dict.values():parts=b.split('/')iflen(parts)>=2:month=int(parts[1])ifmonth==target_month:count+=1# 输出结果print(count)if__name__=="__main__":main()

JavaScript

constreadline=require('readline');constrl=readline.createInterface({input:process.stdin,output:process.stdout});letlines=[];rl.on('line',(line)=>{lines.push(line.trim());});rl.on('close',()=>{if(lines.length<3)return;// 目标月份lettargetMonth=parseInt(lines[0]);// 员工姓名列表letnames=lines[1].split(' ');// 员工生日列表letbirthdays=lines[2].split(' ');// 使用 Map 进行去重和覆盖letemployeeMap=newMap();for(leti=0;i<names.length;i++){if(names[i].length>0){employeeMap.set(names[i],birthdays[i]);}}letcount=0;// 遍历统计目标月份for(letbirthdayofemployeeMap.values()){letparts=birthday.split('/');if(parts.length>=2){letmonth=parseInt(parts[1]);if(month===targetMonth){count++;}}}// 输出结果console.log(count);});

C++

#include<iostream>#include<vector>#include<string>#include<unordered_map>#include<sstream>usingnamespacestd;intmain(){inttargetMonth;if(!(cin>>targetMonth))return0;string dummy;getline(cin,dummy);// 消耗换行符string namesLine,birthdaysLine;getline(cin,namesLine);getline(cin,birthdaysLine);vector<string>names;vector<string>birthdays;string temp;// 解析姓名列表stringstreamssNames(namesLine);while(ssNames>>temp){names.push_back(temp);}// 解析生日列表stringstreamssBirthdays(birthdaysLine);while(ssBirthdays>>temp){birthdays.push_back(temp);}// 哈希表去重并记录最后一次生日unordered_map<string,string>employeeMap;for(size_t i=0;i<names.size();i++){employeeMap[names[i]]=birthdays[i];}intcount=0;for(constauto&pair:employeeMap){string birthday=pair.second;// 查找第一个和第二个 '/' 的位置size_t firstSlash=birthday.find('/');size_t secondSlash=birthday.find('/',firstSlash+1);if(firstSlash!=string::npos&&secondSlash!=string::npos){// 提取月份字符串并转换为整数string monthStr=birthday.substr(firstSlash+1,secondSlash-firstSlash-1);intmonth=stoi(monthStr);if(month==targetMonth){count++;}}}// 输出结果cout<<count<<endl;return0;}

Go

packagemainimport("bufio""fmt""os""strconv""strings")funcmain(){scanner:=bufio.NewScanner(os.Stdin)// 读取目标月份if!scanner.Scan(){return}targetMonthStr:=strings.TrimSpace(scanner.Text())targetMonth,_:=strconv.Atoi(targetMonthStr)// 读取姓名列表if!scanner.Scan(){return}names:=strings.Fields(scanner.Text())// 读取生日列表if!scanner.Scan(){return}birthdays:=strings.Fields(scanner.Text())// map去重employeeMap:=make(map[string]string)fori:=0;i<len(names);i++{employeeMap[names[i]]=birthdays[i]}count:=0// 遍历统计for_,birthday:=rangeemployeeMap{parts:=strings.Split(birthday,"/")iflen(parts)>=2{month,_:=strconv.Atoi(parts[1])ifmonth==targetMonth{count++}}}// 输出结果fmt.Println(count)}

C语言

#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX_EMPLOYEES105#defineMAX_NAME_LEN20#defineMAX_DATE_LEN25// 员工结构体typedefstruct{charname[MAX_NAME_LEN];charbirthday[MAX_DATE_LEN];}Employee;intmain(){inttargetMonth;if(scanf("%d",&targetMonth)!=1)return0;// 读取直到行尾intc;while((c=getchar())!='\n'&&c!=EOF);charnamesLine[MAX_EMPLOYEES*MAX_NAME_LEN];charbirthdaysLine[MAX_EMPLOYEES*MAX_DATE_LEN];if(fgets(namesLine,sizeof(namesLine),stdin)==NULL)return0;if(fgets(birthdaysLine,sizeof(birthdaysLine),stdin)==NULL)return0;charnames[MAX_EMPLOYEES][MAX_NAME_LEN];charbirthdays[MAX_EMPLOYEES][MAX_DATE_LEN];intnameCount=0;intbdayCount=0;// 解析姓名char*token=strtok(namesLine," \n\r");while(token!=NULL){strcpy(names[nameCount++],token);token=strtok(NULL," \n\r");}// 解析生日token=strtok(birthdaysLine," \n\r");while(token!=NULL){strcpy(birthdays[bdayCount++],token);token=strtok(NULL," \n\r");}Employee uniqueEmployees[MAX_EMPLOYEES];intuniqueCount=0;// 遍历所有输入,进行去重和覆盖for(inti=0;i<nameCount;i++){intfound=0;for(intj=0;j<uniqueCount;j++){if(strcmp(uniqueEmployees[j].name,names[i])==0){// 覆盖已有的生日strcpy(uniqueEmployees[j].birthday,birthdays[i]);found=1;break;}}if(!found){// 新增员工strcpy(uniqueEmployees[uniqueCount].name,names[i]);strcpy(uniqueEmployees[uniqueCount].birthday,birthdays[i]);uniqueCount++;}}intcount=0;// 统计匹配月份for(inti=0;i<uniqueCount;i++){intyear,month,day;// 解析 Year/Month/Dayif(sscanf(uniqueEmployees[i].birthday,"%d/%d/%d",&year,&month,&day)==3){if(month==targetMonth){count++;}}}// 输出结果printf("%d\n",count);return0;}

完整用例

用例1

5 Alice Bob Charlie David Eve Frank Grace Helen 1985/5/10 1990/10/11 1995/10/11 2000/11/10 2005/05/01 2010/10/13 2015/10/14 2020/5/2

用例2

10 Alice Bob Charlie David Eve Frank Grace Helen 1985/05/10 1990/10/11 1995/10/11 2000/11/10 2005/10/13 2010/10/13 2015/10/14 2020/10/15

用例3

5 Alice Bob Charlie Alice Eve Frank Grace Helen 1985/5/10 1990/10/11 1995/10/11 1985/7/10 2005/05/01 2010/10/13 2015/10/14 2020/5/2

用例4

10 piMyZAF2r4VUiN2 TW4FQtvCA1 bs2u4Fhyo Q6H91zlHqUdJbhH ia tHESa7Hoc6lCUV nksbA 6TUcd46NiDX 5jz OP99YCa troJn BiWVSZqxCBGw9 oO4wXGVOTm tmAM bt MMGJIhWHiFH Z9MSdKIhymUp nLpIfTD3YOQK 63Krtu nqVIih DlfXbtFDP UltRjt2ajF FqO 1980/06/02 1953/07/23 1996/11/21 1966/01/13 2010/07/20 2001/04/01 1954/11/05 1998/10/08 1962/06/25 1950/02/08 1981/09/10 1986/10/14 2015/03/04 1961/11/22 1992/05/27 1989/10/20 2019/11/26 2021/10/07 1959/10/01 1984/10/09 1996/09/06 1971/06/26 1969/10/04

用例5

6 MaKRwEyKnKrWglB sN1 imUUF86uWpfOQTR Vgj7MrKlsT4 7TODu0MySW 5OSj5dWaX jpCkNeJ ACLumZ26 yCpfCh1Rr cy5 YiY3xfWQ1t OPZJM4b6Uh8MB39 J6IH5wrHnJWMDk HyIQBUXO 3oW W0 f9v9pZ tyx6 kl620bmCjj9P VgEdb JoBE cyc Nmvy Ze1A rIqIOj3AR b5Piy1 Oczc5jw8qt9 TFLMNulCfT0BYYC GNf dFslUZZwD hozBa zMQef3uG zYVIRgYIPtLem bsIgqAzJxf 28ziOaekKOliI 1983/06/19 2013/06/14 1954/06/14 2020/01/05 1985/08/14 1958/08/20 1970/06/11 1961/08/27 2004/09/24 2005/06/22 1962/01/24 1967/06/10 2009/05/24 1999/12/04 1976/12/22 2025/06/26 2024/02/26 1971/06/28 2017/02/02 2025/06/05 1997/10/07 1978/09/13 1975/06/26 2007/06/24 1995/06/07 2014/06/23 1954/11/03 2011/09/14 1995/05/14 1953/01/02 1967/01/22 2001/06/06 2016/09/20 1998/12/10 2019/03/04

用例6

4 iHZe4F2 7BQGHb4UL 1DxpzAm 7BQGHb4UL XKIJ3v2oKBNC 9WNP XKYrRLGhImrY WC Zg8eTVbJkuyC 39pvrZcI0fAZ65e snyHQznI h42M0gKWBOgmpb sl R4WA7E Wh8 x 6lDXYAENK 5ZQaaoVCygECuj k7z GrAEVq2UXjwghv 0E9QIZA rigA GORzx4m5Aaur7 tii beSef2Rt 2EyHff5Y cKOW92eEVokxpc N5X oTf wneNOuJe13 kDd 2017/12/06 1998/04/18 1964/11/20 1995/11/22 2015/02/12 1975/04/25 1968/11/25 2011/09/10 2000/12/24 2019/04/24 2018/01/23 2006/07/04 2020/03/06 1978/04/07 2025/09/01 1963/02/06 1974/03/08 1958/12/28 1960/11/04 2015/10/18 1973/09/15 1952/02/17 1995/07/06 1989/05/13 2013/04/01 1968/04/11 2010/04/27 1987/05/01 2024/01/08 2003/06/17 2011/06/14

用例7

11 kPk xi gvnceH1gEa MoRun0XjhsmCy3 jPrd HL nY RgFGdbdPKC 3VbvWvEdB697bL fnk1dMHMSI yXkTWWq5ioW qKWo3EsXK44Ffj 10fW E32RN F 4sfpoyn9n3 1972/08/16 2001/11/11 1970/02/15 1975/01/07 2003/11/23 2000/06/19 1998/12/03 1975/12/04 1967/04/06 1969/03/10 1963/10/23 2000/11/24 2004/12/15 1954/12/22 1953/07/03 1962/06/18

用例8

1 IYqrwSXwaVlhAT pBC1JS APCW DmSTt5bbmm8 xCNQzlOFX74 Al7s2p716u3J 3 9z 2 J ru824 2 c8tR RPu9QI5D9m 2Gco6fLDQ1khpz ZAd63epBA1AZ Al7s2p716u3J xI4fH2 0JrTn 9kvk 972RhsuMjbPz CgAf1i2DcOeevv5 URnDwxJfIForvyi BZLj uDBF4sTWP ogMctfpxj3 gkVX gm9aQY t4VpwY3H C1pS azIo9t zkOqKA7rbsY R2Ub3 26RiKjB9 KnCUO c7WoMsDt3a7q SVXwS7p LJiSzq sMvY6Jsjjqkj HRhRlkNLcxW2 U uq IOgK1SGf iJXwFPcSkI nqdBCHMSO OfPlU5XKBIcDq6M 4V7nYU YANB7aEGCCMF6D 1987/01/07 2002/10/09 1961/01/23 2003/01/26 1972/04/14 1951/09/04 1980/01/01 1983/01/21 1972/01/10 1963/01/15 2020/11/16 2000/09/02 1981/08/03 2013/07/26 1999/01/03 1989/08/11 2001/05/22 1977/04/06 2022/01/21 1974/01/15 2024/07/20 1994/01/20 2004/11/20 1976/12/17 2000/04/03 2014/11/26 1985/05/10 2004/02/11 2013/01/08 1978/07/04 1994/12/19 2011/04/02 1995/06/13 1985/01/24 2017/12/17 2003/01/13 1987/01/22 1997/01/09 1959/07/03 2018/04/10 1969/12/15 2014/01/12 2019/01/13 2022/07/14 2001/01/28 1967/08/07 2000/02/05 2012/01/24

用例9

11 V36Ndxd6XIL8NFT jXFNR20 XSZFp74ynhO2YCV nwNnRbFxtxrXHx5 Y3VZPt kLasjXgX7YMvfKs 1YUhyqQ3eVL6 PC gGkvgS7wDvPL0 CUKR EH laY i3MB 6HqcsC eJQ9RooLzGt pHTGQ4A ETemV bZvvPnMnFmFNW a05iCQ QYSRNy7 xd FtVS25xihU RVT ePbzfLv ejpmWZRh7jx FFLLTGoH3 JcXrBcLxjS oC A6YL4MCbK5aBJ8 FFLLTGoH3 DaI4iXEb1tinjOY BER6y1HW XV6CS7qWD Bllzfo32CaVFYFR ZneMHGSFADVn9Cl a8Duwx0bdGL qBql Qtpzo2QU91cEDC BblUUE SaCU1VqOb bYfzYi UkFDYKvE4 nH6aQEFz HV3p20vDQ1HA w VeFuFjkR Rxfb50deYvLhYVl 1964/11/06 1951/04/17 1973/02/11 2021/10/01 1993/08/25 1971/11/11 1958/07/02 2025/11/06 1952/11/01 2024/11/19 1969/04/03 1952/01/24 1998/11/27 2020/03/09 1970/11/28 1974/09/17 1963/07/15 1973/02/11 1969/11/16 2001/11/11 1973/11/21 2003/10/23 2020/01/22 2017/07/07 1964/10/25 1980/02/14 2020/03/13 2016/11/23 1984/01/28 1990/10/17 2005/09/28 1954/08/18 2008/11/07 1999/08/11 1970/11/27 2018/11/05 1955/09/16 2018/11/09 1950/11/13 2008/08/23 2000/01/06 2004/03/17 1970/11/03 1966/03/03 1989/03/27 2008/01/21 1953/02/25

用例10

11 FRDtgJ8muOfZJ7 gtpnO0bnNeyYne 1yJnx0ir8Oj B6GPuYJWZKFG7jm 3rAqRg99BGUK 3ViSbTwdE7BC0 vCpcKKhrPz9 lPLTIfGsKe89k HtW9YkTCOlXj wHVLVoyp20 LmERaNv eyCxoVPeF4fK JWC f8xl 4DPXRUYgg kTKrvWyQ78 BhmGoHjeabV0 LW4bXDeo6Ax1 sPTlBR aq6So0sRPF E6HUbKzQO0FLQh8 hivRt qXvvt5Lch r3eTdSva7xYA fvCGvNpA bb67v2n2cGhQjH F95p S1HZXpH2mXwJV v8JMz2T sb B6a2Th5e3pe 2000/11/15 2001/12/11 1971/06/08 1957/03/10 1963/10/20 1972/02/25 1981/11/19 1973/04/08 1989/07/10 1995/08/02 2017/09/02 1966/04/10 1955/11/10 1950/08/23 2000/11/08 1972/11/19 2008/05/24 2006/01/10 1992/11/08 2014/09/15 2009/05/06 1991/11/08 2017/05/20 1999/06/07 1968/11/10 1971/11/27 2018/11/14 1971/12/02 1997/12/14 1992/11/03 2011/02/19

文章目录

  • 准备生日礼物
  • 题目描述
  • 输入描述
      • 补充说明
  • 输出描述
  • 示例1
  • 示例2
  • 示例3
  • 解题思路
    • 核心思想
    • 复杂度分析
  • Java
  • Python
  • JavaScript
  • C++
  • Go
  • C语言
  • 完整用例
    • 用例1
    • 用例2
    • 用例3
    • 用例4
    • 用例5
    • 用例6
    • 用例7
    • 用例8
    • 用例9
    • 用例10

http://www.cnnetsun.cn/news/2003910.html

相关文章:

  • # 发散创新:基于Selenium的自动化测试框架重构与实战优化在当今快速迭代的软件开
  • **用Python + DeepLearning玩转AI艺术:从代码到生成式视觉创
  • AB测试自动化革命-动态因果分流与指标自治
  • 2025届最火的五大降AI率网站实测分析
  • aibiye爱毕业是一款免费查重平台,每日检测次数无限制,AI改写功能助力论文降重更高效
  • MongoDB中什么是Hashed Shard Key的哈希冲突_哈希函数的分布均匀性分析
  • 【紧急通告】C# 14原生AOT已成Dify企业版合同SLA新增条款!未启用AOT部署的客户将于2025 Q3起暂停远程模型热更新支持——立即获取迁移检查表与ROI测算器
  • 多维度拆透渲染引擎 第一篇【维度:定义】概念正本清源 —— 渲染引擎的本质与“引擎性“
  • 基于Vue3与TypeScrt开发的Three.js汽车展厅源码
  • MusicBee网易云歌词插件:打造专业级音乐播放体验
  • 新概念英语第二册16_A polite request
  • Bilibili视频下载神器:5分钟掌握跨平台B站视频下载技巧
  • 告别手写Shader!用Unity ShaderGraph从零实现一个卡通水面(URP 2022.3 LTS)
  • 【限时开源】Dify文档解析性能诊断工具集(含PDF结构分析热力图、文本流失追踪器、Embedding一致性校验器)
  • Spring事务同步器TransactionSynchronizationAdapter:除了afterCommit,这几个回调方法你用对了吗?
  • 深入ego_planner状态机:从代码层面理解XTDrone中无人机的重规划决策逻辑
  • 远程工作骗局:隐形加班——软件测试从业者的专业困境与破局之道
  • 告别XDMA!用AXI Bridge实现FPGA主动读写PC内存(附WinDriver测试与中断配置)
  • 大学生党务学习平台小程序(文档+源码)_kaic
  • 2025年09月CCF-GESP编程能力等级认证Python编程三级真题解析
  • 无线调试中的端口转发问题
  • 拆解网红小风扇:它的‘边充边放’和‘过路保护’是怎么用一颗FS8A15S8 MCU实现的?
  • 量子退火实战避坑指南:约束条件转哈密顿量,你的M值真的设对了吗?
  • 告别轮询!S32K144外部中断配置保姆级教程(基于S32 Design Studio和SDK)
  • 动力电池系统继电器选型与故障诊断实战指南
  • 从电影分类到用户画像:用Hive lateral view + explode搞定业务中的‘一对多’数据清洗
  • 别再踩坑了!uni-app开发App请求报错statusCode:-1的终极排查指南(附真机调试技巧)
  • 从职场回归考场:一位十年工龄工程师的北航MEM备考实战复盘
  • 用ESP32和0.96寸OLED做个桌面小摆件:实时显示天气/时间(附完整源码)
  • 别再调参了!用Simulink自带的DC Motor模型,5步搞定直流有刷电机双闭环PID仿真