编辑代码

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int start;
    int end;
} Interval;

// 比较函数,用于排序
int compare(const void *a, const void *b) {
    return ((Interval*)a)->end - ((Interval*)b)->end;
}

void intervalCover(Interval intervals[], int n) {
    // 将区间按照右端点从小到大排序
    qsort(intervals, n, sizeof(Interval), compare);
    
    int count = 1; // 至少需要选择一个区间
    int end = intervals[0].end; // 当前选择的区间的右端点
    printf("选择的区间为:[%d, %d]\n", intervals[0].start, intervals[0].end);
    
    // 从第二个区间开始遍历
    for (int i = 1; i < n; i++) {
        // 如果当前区间的左端点大于等于前一个选择的区间的右端点
        if (intervals[i].start >= end) {
            count++;
            end = intervals[i].end;
            printf("选择的区间为:[%d, %d]\n", intervals[i].start, intervals[i].end);
        }
    }
    
    printf("最少需要选择 %d 个区间\n", count);
}

int main() {
    Interval intervals[] = { { 1, 3 }, { 2, 4 }, { 3, 6 }, { 4, 7 }, { 6, 9 } };
    int n = sizeof(intervals) / sizeof(intervals[0]);
    
    intervalCover(intervals, n);
    
    return 0;
}