华为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;
}
相关推荐
§ꦿCFོ༉1 小时前
嵌入式八股—C语言入门学习(一)
c语言·编程语言·嵌入式八股文
沐晓时光3 小时前
C语言入门,字符串和字符串函数知识讲解
c语言·开发语言
智者知已应修善业9 小时前
【51单片机实现从下到上,从上到下,从中间到两边,两边到中间】2024-10-23
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
布莱克60518 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
揽星河..1 天前
【C语言】底层程序设计
c语言·开发语言
揽星河..1 天前
【C语言】结构体
c语言·开发语言
唐青枫1 天前
C 语言 malloc() 详解与实战 Demo
c语言
揽星河..1 天前
【C语言】指针
c语言·开发语言
蹊黎2 天前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
爱聊灵光的维C2 天前
从看见世界到重构认知:在视觉与硬件的交汇处,寻找我们这代人的北极星
c语言·物联网·计算机视觉·重构·硬件工程·射频工程