这道题应该用贪心的思想来做,每个节目写成一个结构体,将每个节目按照结束的时间升序排序。这个用sort很容易就能办到的,如果不知道怎么用sort对结构体排序,建议先看看sort的使用方法。接下来就是用贪心的思想枚举,枚举出每一个节目作为第一个节目看最多能看多少个。找出其中的最大值就是最多能看的节目数目了。觉得你的程序和解题的思路偏离的比较大啊,看不出你对每个电视节目进行了排序(或者说你的排序写的有问题),也没看出贪心实现。建议按照上面的思路重新写一遍吧。还有搞ACM应该是有看到思路就能用代码实现的能力,而不是动不动就让人帮忙调试代码。应该锻炼一下自己debug的能力。
样例代码,仅供参考:
#include
using namespace std;
struct channel{
int start;
int end;
};
int Max(int a, int b);bool Cmp(channel a, channel b);
int main(void){
int i;
int j;
int n;
int num_chan;
int max_chan;
channel last_chan; channel chan[1005];
while ((cin>>n) && (n!=0)) {
max_chan = 0;
for (i=0; i
}
sort(chan, chan+n, Cmp);
for (i=0; i
last_chan = chan[i];
for (j=i; j
{
++num_chan;
last_chan = chan[j];
}
}
max_chan = Max(max_chan, num_chan); }
cout << max_chan << endl; }
return 0;}
int Max(int a, int b){
return a > b ? a : b;
}
bool Cmp(channel a, channel b){
return a.end < b.end;
}