题目描述
sdut 大学生艺术中心每天都有n个活动申请举办,但是为了举办更多的活动,必须要放弃一些活动,求出每天最多能举办多少活动。
输入
输入包括多组输入,每组输入第一行为申请的活动数n,从第2行到n+1行,每行两个数,是每个活动的开始时间b,结束时间e;
输出
输出每天最多能举办的活动数。
示例输入
12 15 20 15 19 8 18 10 15 4 14 6 12 5 10 2 9 3 8 0 7 3 4 1 3
示例输出
5
#include<stdio.h>
int main()
{
int N;
int begin[100];//定义开始时间的数组
int end[100];//定义结束时间数组
int select[100] = {0};/初始化
int i = 0, count = 0;//初始化
int timestart = 0;//初始化
while(scanf("%d", &N)!=EOF)//排序N个不同事件,规则:按照结束时间从小到大排
{
for(int k=0; k<N; k++)
{
scanf("%d", &begin[k]);
scanf("%d", &end[k]);
}
for(int k=0;k<N-1;k++)
for(int l=0; l<N-1-k; l++)
if(end[l]>end[l+1])
{
int t1, t2;
t1 = begin[l];
begin[l]=begin[l+1];
begin[l+1] = t1;
t2 = end[l];
end[l]=end[l+1];
end[l+1] = t2;
}
while(i<N)
{
select[i] = 0;//清零, 使前一次的结果对下一次运算没影响
if(begin[i] >= timestart)
{
select[i] = 1;//每执行一次,这个数组不同就会被赋一次1,(i 是i++ 的,不要忘了哈)
timestart = end[i];
count++;//计数
}
i++;
}
printf("%d\n", count);
timestart = 0;//此处比较容易忽略,注意清零
i=0;//清零
count = 0;//清零
}
return 0;
}
反思:这个题做了一个下午,一直WA, 最后和同学一起讨论才知道“清零”, 这是一个容易忽略的地方。。。一定要注意哈!!