用c++实现以下:输入 输入有多行,第一行是一个整数n(1<n<100)表示该测试数据共有n个活动。 随后的n行,每行有3个正整数Si,Ei (0<=Si,Ei<=24),分别表示第i个报告的起始与结束时间(Si<=Ei)。 输出 输出航航最多可以参加多少个报告。 样例输入 5 1 3 2 3 3 4 4 5 4 6 样例输出 3
时间: 2024-02-24 14:55:38 浏览: 160
以下是用C++实现的代码:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
struct Activity {
int start, end;
};
bool cmp(Activity a, Activity b) {
return a.end < b.end;
}
int main() {
int n;
cin >> n;
Activity activities[n];
for (int i = 0; i < n; i++) {
cin >> activities[i].start >> activities[i].end;
}
sort(activities, activities + n, cmp);
int count = 1, end_time = activities[0].end;
for (int i = 1; i < n; i++) {
if (activities[i].start >= end_time) {
count++;
end_time = activities[i].end;
}
}
cout << count << endl;
return 0;
}
```
思路:
首先,我们定义一个结构体`Activity`表示每个活动的起始时间和结束时间。然后,我们输入所有的活动,并按照结束时间从小到大排序,这样可以方便我们贪心地选择活动。接着,我们从第一个活动开始,依次判断每个活动能否参加,如果能,就选择它并更新已选择活动的结束时间。最后,输出选择的活动数即可。
注意:
1. 对于输入的时间,我们可以直接使用int类型,因为它们都是整数。
2. 要注意结构体的定义和排序函数的编写,这是本题的难点。
阅读全文