输入
输入数据包含多组测试数据,每组测试数据的第一行包含一个整数 n(n <= 100),表示你喜欢看的节目的总数。然后是 n 行数据,每行包括两个数据 TSi,TEi(1 <= i <= n),分别表示第 i 个节目的开始和结束时间。为了简化问题,每个时间都用一个正整数表示。
n 为 0 表示输入结束,不做处理。
输出
每组数据输出一个正整数,表示能完整看到的电视节目的个数。
每组输出占一行。
输入样例 1
12 1 3 3 4 0 7 3 8 15 19 15 20 10 15 8 18 6 12 5 10 4 14 2 9 0
输出样例 1
5
#include <stdio.h>
#include <stdlib.h>
// 定义节目结构体
typedef struct {
int start;
int end;
} Show;
// 比较函数,用于qsort排序
int compare(const void *a, const void *b) {
Show *showA = (Show *)a;
Show *showB = (Show *)b;
if (showA->end == showB->end) {
return showA->start - showB->start;
}
return showA->end - showB->end;
}
int max_complete_shows(int n, Show *shows) {
if (n == 0) {
return 0;
}
// 按照结束时间排序,如果结束时间相同,按开始时间排序
qsort(shows, n, sizeof(Show), compare);
int count = 0;
int current_end_time = 0;
for (int i = 0; i < n; i++) {
if (shows[i].start >= current_end_time) {
count++;
current_end_time = shows[i].end;
}
}
return count;
}
int main() {
int n;
while (scanf("%d", &n) != EOF && n != 0) {
Show shows[100];
for (int i = 0; i < n; i++) {
scanf("%d %d", &shows[i].start, &shows[i].end);
}
int result = max_complete_shows(n, shows);
printf("%d\n", result);
}
return 0;
}