华为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;
}
相关推荐
努力小周2 小时前
STM32智能安防系统
c语言·stm32·单片机·嵌入式硬件·物联网·计算机网络·pcb工艺
x138702859574 小时前
c语言中srtlen(指针使用计算字符长度)、传值和传址调用
c语言·开发语言·算法·visual studio
Aurorar0rua8 小时前
CS50 x 2024 Notes Arrays - 04
c语言·开发语言·学习方法
wuminyu8 小时前
Java世界中StringTable源码剖析
java·linux·c语言·jvm·c++
Navigator_Z9 小时前
LeetCode //C - 1095. Find in Mountain Array
c语言·算法·leetcode
dnbug Blog10 小时前
C程序 基本语法
c语言·基本语法
HEADKON11 小时前
Larotretinib拉罗替尼治NTRK融合实体瘤,神经系统反应多为一过性
华为od
AI科技星11 小时前
数术工坊・八卷全书(番外・实战升华副卷)【终极典藏定稿|完整无删减】
c语言·开发语言·网络·量子计算·agi
LuminousCPP12 小时前
数据结构 - 单链表第一篇:单链表基础操作
c语言·数据结构·经验分享·笔记·学习
WL学习笔记12 小时前
通讯录(顺序表实现)
c语言·数据结构·算法