华为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;
}
相关推荐
灯厂码农8 小时前
C语言动态内存分配完全指南(malloc、calloc、realloc、free)
java·c语言·算法
wuyk5559 小时前
24. C 语言模块化:不是拆几个.c 文件那么简单
c语言·开发语言·stm32·单片机
qq_241585619 小时前
可用在中断中浮点数打印类似printf
c语言
C语言小火车10 小时前
C++ 快速排序(Quick Sort)深度精讲:分治思想、Lomuto 分区法及三数取中优化,面试手撕必会
c语言·开发语言·c++·面试·排序算法·快速排序
aaaameliaaa12 小时前
进制练习题【找出只出现一次的数字、交换两个变量(不创建临时变量)、统计二进制中1的个数、打印整数二进制的奇数位和偶数位、求两个数二进制中不同位的个数】
c语言·数据结构·笔记·算法
灯厂码农12 小时前
C语言内存管理——内存对齐与共用体union
linux·服务器·c语言
令狐掌门15 小时前
2026华为OD面试题002:路口最短时间问题
华为od·华为od面试题
伏 念15 小时前
AI Coding 零基础实战教程
c语言·进程·预处理
你家人养牛15 小时前
OOC Relation Plugin:C 语言面向对象 开发的高效辅助工具
c语言·vscode
东华万里15 小时前
第30篇 代码习惯 初学C与数据结构有感
c语言·数据结构·大学生专区