用C语言实现如下代码:学校礼堂每天都会收到许多活动的举办申请,有时活动的计划时间会冲突,因此,需要选择举办一些活动。小刘的工作就是安排学校礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能安排更多的活动,请设计算法帮助小刘安排活动。 输入格式: 第一行是一个整数n (1<n<10000)表示共有n个活动申请。 随后的n行,每行有两个正整数Bi, Ei (0<Bi<Ei<10000),分别表示第i个活动的起始与结束时间,即表示第i个活动申请占用礼堂的时间段为[Bi,Ei]。 输出格式: 输出最多能够安排的活动数目。 输入样例1: 2 1 10 10 11 输出样例1: 1
时间: 2024-02-20 17:56:03 浏览: 52
新建文本文档_贪吃蛇C语言实现代码_
```c
#include <stdio.h>
#include <stdlib.h>
// 活动结构体
struct Activity {
int start; // 开始时间
int end; // 结束时间
};
// 比较函数,用于按活动结束时间排序
int cmp_activity(const void *a, const void *b) {
struct Activity *p1 = (struct Activity *)a;
struct Activity *p2 = (struct Activity *)b;
return p1->end - p2->end;
}
int main() {
int n;
scanf("%d", &n);
// 动态申请内存存储活动
struct Activity *activities = (struct Activity *)malloc(n * sizeof(struct Activity));
// 读入活动
for (int i = 0; i < n; i++) {
scanf("%d%d", &activities[i].start, &activities[i].end);
}
// 按结束时间排序
qsort(activities, n, sizeof(struct Activity), cmp_activity);
int count = 1; // 记录已经安排的活动数量
int last_end = activities[0].end; // 记录上一个安排的活动的结束时间
// 依次安排活动
for (int i = 1; i < n; i++) {
if (activities[i].start >= last_end) {
count++;
last_end = activities[i].end;
}
}
printf("%d\n", count);
// 释放动态申请的内存
free(activities);
return 0;
}
```
阅读全文