2 条题解

  • -1
    @ 2025-9-26 23:03:07

    方法思路

    定义结构体:创建 Schedule 结构体,包含日期 x 和时间 y。
    读取输入:先读取日程数量 n,再读取 n 条日程的日期和时间。
    排序:使用 qsort 函数对日程数组排序,排序规则为:
    若日期不同,按日期升序排列;
    若日期相同,按时间升序排列。
    输出结果:遍历排序后的数组,输出每条日程的日期和时间。

    #include <stdio.h>
    #include <stdlib.h>
    
    // 定义日程结构体:包含日期x和时间y
    typedef struct {
        int x;
        int y;
    } Schedule;
    
    // qsort的比较函数:先按x升序,x相同时按y升序
    int compare(const void *a, const void *b) {
        Schedule *s1 = (Schedule *)a;
        Schedule *s2 = (Schedule *)b;
        if (s1->x != s2->x) {
            return s1->x - s2->x; // 日期不同,返回日期差(升序)
        } else {
            return s1->y - s2->y; // 日期相同,返回时间差(升序)
        }
    }
    
    int main() {
        int n;
        scanf("%d", &n); // 读取日程数量
    
        Schedule schedules[100]; // 存储最多100条日程(题目中n≤100)
    
        // 读取每条日程的日期和时间
        for (int i = 0; i < n; ++i) {
            scanf("%d %d", &schedules[i].x, &schedules[i].y);
        }
    
        // 对日程数组进行排序
        qsort(schedules, n, sizeof(Schedule), compare);
    
        // 输出排序后的日程
        for (int i = 0; i < n; ++i) {
            printf("%d %d\n", schedules[i].x, schedules[i].y);
        }
    
        return 0;
    }
    

    信息

    ID
    618
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    24
    已通过
    6
    上传者