高雄市网站建设_网站建设公司_Spring_seo优化
2026/1/8 23:57:41 网站建设 项目流程

运维日志排序

2025华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型

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

其它语言题解链接

华为OD机试双机位C卷 - 运维日志排序 (Python & C++ & JAVA & JS & GO)

题目描述

[运维工程师]采集到某产品线网运行一天产生的日志n条,现需根据日志时间先后顺序对日志进行排序,日志时间格式为H:M:S.N。

  • H表示小时(0~23)
  • M表示分钟(0~59)
  • S表示秒(0~59)
  • N表示毫秒(0~999)

时间可能并没有补全,也就是说,01:01:01.001也可能表示为1:1:1.1。

输入描述

第一行输入一个整数n表示日志条数,1<=n<=100000,接下来n行输入n个时间。

输出描述

按时间升序排序之后的时间,如果有两个时间表示的时间相同,则保持输入顺序。

示例1

输入

2 01:41:8.9 1:1:09.211

输出

1:1:09.211 01:41:8.9

示例2

输入

3 23:41:08.023 1:1:09.211 08:01:22.0

输出

1:1:09.211 08:01:22.0 23:41:08.023

题解

思路

字符串处理 + 自定义排序题型

  1. 自定义结构体,保存每个日志时间的原始字符串时间转换为毫秒之后的值,输入顺序
  2. 接受输入的时间字符串,提出每个字符串中的时、分、秒、毫秒值,统一转换为毫秒,保存至结构体数组中。
  3. 将结构体数组自定义排序按照时间升序,时间相同按照输入顺序升序
  4. 按顺序输出排序之后的日志记录原始字符串。

code

#include<stdio.h>#include<stdlib.h>typedefstruct{longlongt;intidx;chars[20];}Time;// 自定义排序 时间升序,时间相同按照输入顺序intcmp(constvoid*a,constvoid*b){Time*ta=(Time*)a,*tb=(Time*)b;returnta->t!=tb->t?(ta->t-tb->t):ta->idx-tb->idx;}intmain(){intn,H,M,S,N;scanf("%d",&n);Time*arr=malloc(n*sizeof(Time));for(inti=0;i<n;i++){scanf("%s",arr[i].s);sscanf(arr[i].s,"%d:%d:%d.%d",&H,&M,&S,&N);// 统一转换为毫秒arr[i].t=(longlong)H*3600000+M*60000+S*1000+N;arr[i].idx=i;}// 自定义排序qsort(arr,n,sizeof(Time),cmp);// 输出结果for(inti=0;i<n;i++)printf("%s\n",arr[i].s);free(arr);return0;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询