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

华为OD新系统机试真题 2026-04-08 【准备生日礼物】

准备生日礼物

华为OD新系统机试真题 - 华为OD新系统上机考试真题 4.8号 100分题型

华为OD机试真题目录点击查看: 华为OD机试真题题库目录|机考题库 + 算法考点详解

题目描述

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

输入描述

参数 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. 输出结果

JAVA

importjava.util.*;publicclassMain{publicstaticintcalGiftNum(intmonth,String[]names,String[]birthdays){Map<String,Integer>nameMonth=newHashMap<>();for(inti=0;i<names.length;i++){StringcurrentName=names[i];StringcurrentBirthday=birthdays[i];// 生日格式:xxxx/xx/xx,取月份intm=Integer.parseInt(currentBirthday.split("/")[1]);nameMonth.put(currentName,m);}// 统计intcount=0;for(intm:nameMonth.values()){if(m==month){count++;}}returncount;}publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intmonth=sc.nextInt();sc.nextLine();// 吃掉换行Stringname=sc.nextLine();Stringbirthday=sc.nextLine();String[]names=name.split(" ");String[]birthdays=birthday.split(" ");intres=calGiftNum(month,names,birthdays);System.out.println(res);}}

JavaScript

constreadline=require('readline');constrl=readline.createInterface({input:process.stdin,output:process.stdout});letlines=[];rl.on('line',(line)=>{lines.push(line);});rl.on('close',()=>{letmonth=parseInt(lines[0]);letnames=lines[1].trim().split(" ");letbirthdays=lines[2].trim().split(" ");functioncalGiftNum(month,names,birthdays){letnameMonth=newMap();for(leti=0;i<names.length;i++){letcurrentName=names[i];letcurrentBirthday=birthdays[i];letm=parseInt(currentBirthday.split("/")[1]);nameMonth.set(currentName,m);}letcount=0;for(letmofnameMonth.values()){if(m===month)count++;}returncount;}letres=calGiftNum(month,names,birthdays);console.log(res);});

Go

packagemainimport("bufio""fmt""os""strconv""strings")// 计算需要送礼物的人数funccalGiftNum(monthint,names[]string,birthdays[]string)int{nameMonth:=make(map[string]int)fori:=0;i<len(names);i++{currentName:=names[i]currentBirthday:=birthdays[i]// 生日格式:xxxx/xx/xx,取月份parts:=strings.Split(currentBirthday,"/")m,_:=strconv.Atoi(parts[1])nameMonth[currentName]=m}count:=0for_,m:=rangenameMonth{ifm==month{count++}}returncount}funcmain(){reader:=bufio.NewReader(os.Stdin)line,_:=reader.ReadString('\n')month,_:=strconv.Atoi(strings.TrimSpace(line))line1,_:=reader.ReadString('\n')line2,_:=reader.ReadString('\n')names:=strings.Fields(line1)birthdays:=strings.Fields(line2)res:=calGiftNum(month,names,birthdays)fmt.Println(res)}

C语言

#include<stdio.h>#include<string.h>#include<stdlib.h>#defineMAXN1000#defineMAXLEN100// 查找名字是否已存在intfind(charnames[][MAXLEN],intsize,char*target){for(inti=0;i<size;i++){if(strcmp(names[i],target)==0){returni;}}return-1;}intcalGiftNum(intmonth,charnamesArr[][MAXLEN],charbirthdaysArr[][MAXLEN],intn){charnames[MAXN][MAXLEN];intmonths[MAXN];intsize=0;for(inti=0;i<n;i++){char*currentName=namesArr[i];// 解析月份chartemp[MAXLEN];strcpy(temp,birthdaysArr[i]);char*token=strtok(temp,"/");// 年token=strtok(NULL,"/");// 月intm=atoi(token);intidx=find(names,size,currentName);if(idx!=-1){// 已存在 覆盖months[idx]=m;}else{// 新增strcpy(names[size],currentName);months[size]=m;size++;}}// 统计intcount=0;for(inti=0;i<size;i++){if(months[i]==month){count++;}}returncount;}intmain(){intmonth;scanf("%d\n",&month);charnameLine[10000];charbirthdayLine[10000];fgets(nameLine,sizeof(nameLine),stdin);fgets(birthdayLine,sizeof(birthdayLine),stdin);charnames[MAXN][MAXLEN];charbirthdays[MAXN][MAXLEN];intn=0;// 拆分 nameschar*token=strtok(nameLine," \n");while(token!=NULL){strcpy(names[n],token);token=strtok(NULL," \n");n++;}// 拆分 birthdaysintm=0;token=strtok(birthdayLine," \n");while(token!=NULL){strcpy(birthdays[m],token);token=strtok(NULL," \n");m++;}// 调用核心函数intres=calGiftNum(month,names,birthdays,n);printf("%d\n",res);return0;}

c++

#include<iostream> #include<vector> #include<string> #include <utility> #include <sstream> #include<algorithm> #include<cmath> #include<map> using namespace std; // 通用 切割函数 函数 将字符串str根据delimiter进行切割 vector<string> split(const string& str, const string& delimiter) { vector<string> result; size_t start = 0; size_t end = str.find(delimiter); while (end != string::npos) { result.push_back(str.substr(start, end - start)); start = end + delimiter.length(); end = str.find(delimiter, start); } // 添加最后一个部分 result.push_back(str.substr(start)); return result; } int main() { int month; string name; string birthday; cin >> month; // 读取空格 cin.ignore(); getline(cin, name); getline(cin, birthday); vector<string> names = split(name, " "); vector<string> birthdays = split(birthday, " "); map<string, int> nameMonth; for (int i = 0; i < names.size(); i++) { string currentName = names[i]; string currentBirthday = birthdays[i]; nameMonth[currentName] = stoi(split(currentBirthday, "/")[1]); } // 统计 int count = 0; for (auto &p : nameMonth) { if (p.second == month) { count++; } } cout << count; return 0; }

Python

importsys# 计算需要送礼物的人数defcalGiftNum(month,names,birthdays):nameMonth={}foriinrange(len(names)):currentName=names[i]currentBirthday=birthdays[i]# 生日格式:xxxx/xx/xx,取月份m=int(currentBirthday.split("/")[1])nameMonth[currentName]=m# 统计count=0forminnameMonth.values():ifm==month:count+=1returncountif__name__=="__main__":month=int(sys.stdin.readline().strip())names=sys.stdin.readline().strip().split()birthdays=sys.stdin.readline().strip().split()res=calGiftNum(month,names,birthdays)print(res)
http://www.jsqmd.com/news/749183/

相关文章:

  • 【优化求解】通过信号灯交叉路口的连接燃料电池混合动力车的生态驾驶双层凸优化附matlab代码
  • MoltLock:轻量级Go分布式锁库的设计原理与etcd实战
  • Cursor Free VIP终极指南:如何永久免费使用AI编程助手
  • 用eNSP模拟华为网络工程师面试题:手把手复现一个OSPF+RIP+BGP+NAT的综合实验
  • 视频生成中的运动控制技术与优化实践
  • Python脚本依赖管理新思路:manifest实现按需安装与自包含分发
  • TEE防护下LLM推理的安全隐患与防御方案
  • 强化学习在多轮对话系统中的应用与优化
  • ATL:iOS模拟器上AI智能体的分层自动化触控方案
  • 构建高可用AI智能体:从LangGraph实战到生产级部署全解析
  • Godot引擎集成Lua脚本:轻量级扩展与热更新方案详解
  • CLI数据分析工具:提升数据处理效率的自动化利器
  • 抖音批量下载神器:3分钟掌握高清无水印素材批量获取技巧
  • SSH连接管理工具:提升开发运维效率的配置化实践
  • 统计方法 scDEED 检测可疑的 t-SNE 和 UMAP 嵌入并优化超参数
  • Roofline模型与设备端LLM的硬件协同设计优化
  • Linux串口编程避坑指南:从/dev/ttyS0配置到多线程数据收发,一篇搞定
  • Nemotron Elastic框架:大模型推理效率提升关键技术解析
  • 大模型评测框架实战:从标准化竞技场到定制化评估
  • 基于模型预测控制MPC和神经网络相结合的两电平三相逆变器控制研究(Matlab代码实现)
  • MEMORY-T1框架:强化学习驱动的长对话记忆优化方案
  • 开发者技能成长利器:skill-railil 项目解析与实战应用
  • 百度网盘秒传脚本终极指南:3分钟掌握永久文件分享黑科技
  • Nemotron Elastic架构:动态计算图技术优化AI推理性能
  • OBS Multi RTMP插件:一键实现多平台直播同步推流
  • 2026年冷媒加注机怎么选:冷媒注液机厂家推荐、冷媒灌注机厂家推荐、制冷剂加注机厂家、散热行业冷媒加注机厂家推荐选择指南 - 优质品牌商家
  • 拒绝龟速回测:利用 Numba 与 Cython 将 Python 量化策略加速 100 倍的终极奥义
  • 基于Docker与VS Code的LaTeX开发环境搭建与AI集成实践
  • LLVM模型缝合技术:编译器优化与机器学习融合实践
  • 2026专业防火卷帘门优质厂家推荐指南:防火门厂家/防火门安装/PVC快速卷帘门/不锈钢卷帘门/不锈钢防火门/工业卷帘门/选择指南 - 优质品牌商家