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

张开发
2026/4/21 1:00:50 15 分钟阅读

分享文章

华为OD机试真题 新系统 - 准备生日礼物 (Java/Py/C/C++/Js/Go)
准备生日礼物2026 华为OD机试真题 4月8日华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解题目描述小明在一个充满人文关怀的公司上班公司每个月都要为该月生日的同事送一份生日小礼物该事项由小明负责请帮助小明统计某一月份应该准备多少礼物重复录入的员工生日以最后一次录入结果为准请不要重复统计避免浪费。输入描述参数 1要发放礼物的月份取值 1 到 12。参数 2员工列表。参数 3员工生日日期列表该列表和员工列表中的数据对应存在一一对应关系长度一致。补充说明小明公司的员工人数不超过 100人。员工姓名是字母和数字的组合姓名长度大于 0小于 16字节。日期录入格式统一采用 Year/Month/Day Year 长度为 4Month和 Day 长度为 11 到 22系统保证录入日期为合法日期。不考虑同名多位员工的情况名字一致即可认为是同一员工在生产系统会通过工号区分本系统简化处理。输出描述该月份要准备的礼品个数。示例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月份。解题思路核心思想本题是一道简单的字符串解析与哈希表或者字典应用题。主要逻辑如下输入解析依次读取目标月份、员工姓名列表、员工生日列表。去重与更新题目要求“重复录入的员工生日以最后一次录入结果为准”。我们可以利用哈希表字典存储员工的姓名和对应的生日。顺序遍历姓名和生日列表将姓名作为键生日作为值存入字典。由于是按顺序处理后出现的同名员工会自动覆盖前面的记录从而天然满足题意。统计结果遍历字典中的所有生日将其按/分割提取出月份部分。如果该月份等于目标月份则将计数器加一。输出结果最后输出计数器的值。复杂度分析时间复杂度O ( N ) O(N)O(N)其中N NN是员工的人数。我们需要遍历员工列表将其存入哈希表然后再遍历哈希表进行月份匹配两次遍历的时间复杂度均为O ( N ) O(N)O(N)。空间复杂度O ( N ) O(N)O(N)使用哈希表存储每个员工的姓名和生日最坏情况下没有重复员工哈希表大小为N NN。Javaimportjava.util.HashMap;importjava.util.Map;importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){ScannerscannernewScanner(System.in);// 读取目标月份if(!scanner.hasNextInt())return;inttargetMonthscanner.nextInt();scanner.nextLine();// 消耗换行符// 读取员工列表和生日列表String[]namesscanner.nextLine().split( );String[]birthdaysscanner.nextLine().split( );// 使用 HashMap 存储员工姓名和生日自动处理重复覆盖MapString,StringemployeeMapnewHashMap();for(inti0;inames.length;i){employeeMap.put(names[i],birthdays[i]);}intcount0;// 遍历所有去重后的员工生日for(Stringbirthday:employeeMap.values()){String[]partsbirthday.split(/);if(parts.length2){// 提取月份并转换为整数比较intmonthInteger.parseInt(parts[1]);if(monthtargetMonth){count;}}}// 输出结果System.out.println(count);scanner.close();}}Pythonimportsysdefmain():# 读取所有输入行并去除两端空白input_datasys.stdin.read().splitlines()iflen(input_data)3:return# 目标月份target_monthint(input_data[0].strip())# 员工姓名列表namesinput_data[1].strip().split()# 员工生日列表birthdaysinput_data[2].strip().split()# 字典自动去重后出现的覆盖前面的employee_dict{}foriinrange(len(names)):employee_dict[names[i]]birthdays[i]count0# 遍历字典的值统计匹配的月份forbinemployee_dict.values():partsb.split(/)iflen(parts)2:monthint(parts[1])ifmonthtarget_month:count1# 输出结果print(count)if__name____main__:main()JavaScriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});letlines[];rl.on(line,(line){lines.push(line.trim());});rl.on(close,(){if(lines.length3)return;// 目标月份lettargetMonthparseInt(lines[0]);// 员工姓名列表letnameslines[1].split( );// 员工生日列表letbirthdayslines[2].split( );// 使用 Map 进行去重和覆盖letemployeeMapnewMap();for(leti0;inames.length;i){if(names[i].length0){employeeMap.set(names[i],birthdays[i]);}}letcount0;// 遍历统计目标月份for(letbirthdayofemployeeMap.values()){letpartsbirthday.split(/);if(parts.length2){letmonthparseInt(parts[1]);if(monthtargetMonth){count;}}}// 输出结果console.log(count);});C#includeiostream#includevector#includestring#includeunordered_map#includesstreamusingnamespacestd;intmain(){inttargetMonth;if(!(cintargetMonth))return0;string dummy;getline(cin,dummy);// 消耗换行符string namesLine,birthdaysLine;getline(cin,namesLine);getline(cin,birthdaysLine);vectorstringnames;vectorstringbirthdays;string temp;// 解析姓名列表stringstreamssNames(namesLine);while(ssNamestemp){names.push_back(temp);}// 解析生日列表stringstreamssBirthdays(birthdaysLine);while(ssBirthdaystemp){birthdays.push_back(temp);}// 哈希表去重并记录最后一次生日unordered_mapstring,stringemployeeMap;for(size_t i0;inames.size();i){employeeMap[names[i]]birthdays[i];}intcount0;for(constautopair:employeeMap){string birthdaypair.second;// 查找第一个和第二个 / 的位置size_t firstSlashbirthday.find(/);size_t secondSlashbirthday.find(/,firstSlash1);if(firstSlash!string::npossecondSlash!string::npos){// 提取月份字符串并转换为整数string monthStrbirthday.substr(firstSlash1,secondSlash-firstSlash-1);intmonthstoi(monthStr);if(monthtargetMonth){count;}}}// 输出结果coutcountendl;return0;}Gopackagemainimport(bufiofmtosstrconvstrings)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;ilen(names);i{employeeMap[names[i]]birthdays[i]}count:0// 遍历统计for_,birthday:rangeemployeeMap{parts:strings.Split(birthday,/)iflen(parts)2{month,_:strconv.Atoi(parts[1])ifmonthtargetMonth{count}}}// 输出结果fmt.Println(count)}C语言#includestdio.h#includestdlib.h#includestring.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((cgetchar())!\nc!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];intnameCount0;intbdayCount0;// 解析姓名char*tokenstrtok(namesLine, \n\r);while(token!NULL){strcpy(names[nameCount],token);tokenstrtok(NULL, \n\r);}// 解析生日tokenstrtok(birthdaysLine, \n\r);while(token!NULL){strcpy(birthdays[bdayCount],token);tokenstrtok(NULL, \n\r);}Employee uniqueEmployees[MAX_EMPLOYEES];intuniqueCount0;// 遍历所有输入进行去重和覆盖for(inti0;inameCount;i){intfound0;for(intj0;juniqueCount;j){if(strcmp(uniqueEmployees[j].name,names[i])0){// 覆盖已有的生日strcpy(uniqueEmployees[j].birthday,birthdays[i]);found1;break;}}if(!found){// 新增员工strcpy(uniqueEmployees[uniqueCount].name,names[i]);strcpy(uniqueEmployees[uniqueCount].birthday,birthdays[i]);uniqueCount;}}intcount0;// 统计匹配月份for(inti0;iuniqueCount;i){intyear,month,day;// 解析 Year/Month/Dayif(sscanf(uniqueEmployees[i].birthday,%d/%d/%d,year,month,day)3){if(monthtargetMonth){count;}}}// 输出结果printf(%d\n,count);return0;}完整用例用例15 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用例210 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用例35 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用例410 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用例56 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用例64 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用例711 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用例81 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用例911 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用例1011 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解题思路核心思想复杂度分析JavaPythonJavaScriptCGoC语言完整用例用例1用例2用例3用例4用例5用例6用例7用例8用例9用例10

更多文章