算法思路:给定一些节目的开始时间和结束时间,要求得出最大可观看节目数(节目播放时间段不能重叠)。首先对节目按结束时间从小到大进行排序,排序后的第一个节目一定要选,之后从排序后的第二个节目开始依次选取开始时间大于或等于当前已选取节目中的最后一个节目的结束时间的节目,直至遍历完所有节目。
#include<iostream>
#include<algorithm>
using namespace std;
struct show{ //定义节目结构体
int startTime;
int endTime;
}s[101];
bool cmp(show a,show b){ //定义结构体的比较函数
if(a.endTime<b.endTime)
return true;
else
return false;
}
int main(){
int n,c=1,t;
cout<<"请输入节目数"<<endl;
cin>>n;
for(int i=0;i<n;i++){
cout<<"请输入节目开始时间:";
cin>>s[i].startTime;
cout<<"请输入节目结束时间:";
cin>>s[i].endTime;
}
sort(s,s+n,cmp); //调用sort函数进行节目结构体的从小到大排序
t=s[0].endTime;
for(int i=1;i<n;i++){
if(t<=s[i].startTime){
c++;
t=s[i].endTime;
}
}
cout<<"最大可安排的节目数为"<<c;
return 0;
}