华为OD机试真题双机位C卷 【运维日志排序】C语言实现

运维日志排序

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

c 复制代码
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    long long t;
    int idx;
    char s[20];
} Time;

// 自定义排序 时间升序,时间相同按照输入顺序
int cmp(const void *a, const void *b) {
    Time *ta = (Time*)a, *tb = (Time*)b;
    return ta->t != tb->t ? (ta->t - tb->t ) : ta->idx - tb->idx;
}

int main() {
    int n, H, M, S, N;
    scanf("%d", &n);
    Time *arr = malloc(n * sizeof(Time));
    
    for (int i = 0; i < n; i++) {
        scanf("%s", arr[i].s);
        sscanf(arr[i].s, "%d:%d:%d.%d", &H, &M, &S, &N);
        // 统一转换为毫秒
        arr[i].t = (long long)H * 3600000 + M * 60000 + S * 1000 + N;
        arr[i].idx = i;
    }
    // 自定义排序
    qsort(arr, n, sizeof(Time), cmp);
    
    // 输出结果
    for (int i = 0; i < n; i++)
        printf("%s\n", arr[i].s);
    
    free(arr);
    return 0;
}
相关推荐
小+不通文墨3 小时前
--no-multibyte-chars 解决OLED_data.c移植后中文乱码问题
c语言·经验分享·笔记·学习
dtq04243 小时前
C语言-文件操作1
c语言·开发语言·学习
Suxing94 小时前
C语言基础分享:“群租房”和“点名册”——联合体与枚举
c语言·算法·c#
q27551300424 小时前
AS717 Type-C转DP 8K方案外维少 AS717电路图
c语言·开发语言
自然常数e5 小时前
顺序表专题
c语言·数据结构·visual studio
j7~6 小时前
【数据结构初阶】队列的实现(链式队列 + 循环队列)--详解
c语言·开发语言·数据结构·学习·队列·queue·c\c++
草莓熊Lotso6 小时前
【Linux网络】深入理解Linux IO多路复用:select服务器完善、内核原理与poll实战
linux·运维·服务器·c语言·网络·c++
king_linlin6 小时前
算法基础——算法复杂度
c语言·开发语言·数据结构·算法
xxwxx__7 小时前
51单片机电机控制全攻略:直流电机、舵机与步进电机
c语言·单片机·嵌入式硬件·51单片机
king_linlin7 小时前
数据结构——顺序表(附图文讲解|超详细)
c语言·数据结构·算法