今年暑假不AC

“今年暑假不AC?”
“是的。”
“那你干什么呢?”
“看世界杯呀,笨蛋!”
“@#$%^&*%...”

确实如此,世界杯来了,球迷的节日也来了,估计不少ACMer也会抛开电脑,奔向电视了。
做为球迷,必定想看尽可能多的完整的比赛,固然,做为新时代的好青年,你必定还会看一些其它的节目,好比新闻联播(永远不要忘记关心国家大事)、很是6+七、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了全部你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标是能看尽可能多的完整节目)
算法

Input输入数据包含多个测试实例,每一个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,而后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每一个时间都用一个正整数表示。n=0表示输入结束,不作处理。
Output对于每一个测试实例,输出能完整看到的电视节目的个数,每一个测试实例的输出占一行。Sample Input
12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0

这个题看的时候比较难,就在网上找了一下大佬的代码参考,明白了大概的思路。首先是对输入的n组数组按结束时间的顺序进行排序,这里有一个细节要注意,若是你用结构体的话你能够一次性实现一组数据的交换,但你用二维数组的时候你就必须把一组中两个数组都拿出来分别交换,这里可能会缺乏考虑而出错。排完序以后即可以用贪心算法得出结果。代码以下:数组

#include <stdio.h>
#include <stdlib.h>

int main(){
    int i,j,a[100][2],cnt,s,t1,t2,end;
    while(scanf("%d",&s)&&(s!=0))
   {
       cnt=1;
       for(i=0;i<s;i++)
       {
            for(j=0;j<2;j++)
            {
                scanf("%d",&a[i][j]);
            }
       }
       for(i=0;i<s-1;i++)
       {
             for(j=i+1;j<s;j++) { if(a[i][1]>a[j][1])
                   {
                      t1=a[j][1];
                      a[j][1]=a[i][1];
                      a[i][1]=t1;
                      t2=a[j][0];
                      a[j][0]=a[i][0];
                      a[i][0]=t2;
测试

                       }
                  }
       }
    end=a[0][1];
    for(i=1;i<s;i++)
    {
        if(a[i][0]>=end)
        {
            cnt++;
            end=a[i][1];
        }
    }


   printf("%d",cnt);
    printf("\n");
    }
    return 0;
}
ui