链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037
思路:该题的重点在于以之前一个节目的结束时间和下一个节目的开始时间做对比,如果开始时间晚于结束时间则可播放下一个节目,所以先对结束时间做一个排序,找出最快结束的节目,然后依次的匹配开始时间
代码:
#include<stdio.h>
int main()
{
int swap(int *x, int *y); //构造一个进行数据转换的函数
int a[100], b[100];
int n, i, j;
int tm;
int sum;
while(scanf("%d", &n) != EOF)
{
if(n>=1 && n<=100)
{
for(i=0; i<n;i++)
{
scanf("%d%d", &a[i], &b[i]);
}
for(i=0;i<n;i++) //对结束时间依次排序
{
for(j=i;j<n;j++)
{
if(b[j]<b[i])
{
swap(&a[i], &a[j]); //注意这里为地址的传递,值传递只能是单向的
swap(&b[i], &b[j]);
}
}
}
sum = 1;
tm = b[0];
for(i=0;i<n;i++)
{
if(a[i]>=tm) //对比结束时间和开始时间,然后判断出节目数量
{
sum++;
tm = b[i];
}
}
printf("%d\n", sum);
}
}
}
int swap(int *x, int *y)
{
int t;
t = *x;
*x = *y;
*y = t;
return 0;
}