• 活动选择问题


    题目描述

     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
    ", count);
         timestart = 0;//此处比较容易忽略,注意清零
         i=0;//清零
         count = 0;//清零
        }
        return 0;
    }
    
    反思:这个题做了一个下午,一直WA, 最后和同学一起讨论才知道“清零”, 这是一个容易忽略的地方。。。一定要注意哈!!
    每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
  • 相关阅读:
    List集合
    类加载机制
    代码优化
    JVM字节码
    Tomcat优化之Apache Jmeter压力测试工具
    Tomcat优化
    JVM垃圾收集器
    lambda表达式
    java 内部类
    java多线程3种方式
  • 原文地址:https://www.cnblogs.com/6bing/p/3931285.html
Copyright © 2020-2023  润新知