华为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;
}
相关推荐
SuperByteMaster1 分钟前
timer.c 介绍
c语言
qq_448011162 小时前
C语言中的柔性数组
c语言·开发语言·柔性数组
luj_17685 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
wuyk5555 小时前
3.链表:用指针串联的动态数据结构
c语言·开发语言·数据结构·链表
Lzh编程小栈6 小时前
【嵌入式底层】SPI超透彻详解:通信原理、四线结构、四种模式、寄存器底层 + 面试全集
c语言·stm32·单片机·面试·职场和发展
凉茶钱7 小时前
【数据结构】堆的应用
c语言·数据结构
Herbert_hwt11 小时前
【C语言基础】常量、选择结构与运算符全解析
c语言·开发语言·算法
WWJA王文举1 天前
I²C通信完整流程详解:START、地址、ACK、数据、Repeated START和STOP一次讲透
c语言·开发语言
qq_448011161 天前
C语言中的动态内存分配
c语言·开发语言·php
动词ing1 天前
【学习笔记】C语言(数组指针与指针数组+字符数组+函数+参数传递+字符串作为形参+递归函数+指针函数+回调函数+结构体嵌套+内存动态分配函数)
c语言·笔记·学习