解题思路:
1.把这条道路上树的总数用一个数组装起来,把这个数组的每个元素都先定义为0;

2.确定地铁区域,用双循环,外循环确定有多少个铁路区域;内循环用来给铁路区域做处理,并让此区域中对应所有的数组元素加1。(我们不用管那些重叠的铁路区域,我们只需要知道非地铁区域对应的数组元素的数值一直都是0就行了,这点很重要。)

3.重头到尾开始统计整条道路树木的数量(整个数组的情况),用循环,定义t=0,一旦出现有元素等于0,我们就t=t+1。全部过一遍,我们就能知道有多少个等于0的元素了(也就是没被铁路区域盖住的树木数量)。

4.输出t,即剩余的树木。

注意事项:
1.由于数组arr的第最开始元素是arr【0】,所以从arr【0】到arr【z】一共有z+1个元素。

2.,同理,由于道路第0米也会有一颗树(如题所述),所以如果一条道路的长度为z,则这条道路一共有z+1棵树。

3.注意好循环中始末的数值!


参考代码:

#include

int main()

{

    int j,i,q,s,z,t=0,n=0;

    scanf("%d",&z);  //道路的长度(有z+1棵树)

    scanf("%d",&n);  //输入n组地铁区域

    int a[z];  //(有z+1个元素的数组)

    for(i=0;i<=z;i++)  //把所有数组元素赋值为0

    {

        a[i]=0;

    }

    for(i=1;i<=n;i++)  //对地铁区域依次进行处理

    {

        scanf("%d%d",&q,&s);  //每个地铁区域初,末位置

        for(j=q;j<=s;j++)

        {

            a[j]+=1;   //把区域里的数加上去,让它的数值不为0

        }

    }

    for(i=0;i<=z;i++)   //对整条道路进行统计

    {

        if(a[i]==0)

        t++;

    }

    printf("%d",t);

    return 0;

}


点赞(0)
 

0.0分

6 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 3 条评论

H2330819074 1年前 回复TA
@喜欢吃东西的小东西 把初始的树都设置为1,如果它因为铁路处理就把它变为0。后面再从头逐个统计没被处理的树,也就是为1的元素的数量。这个方法确实会比我的这个方法更简单些。
H2330819074 1年前 回复TA
@喜欢吃东西的小东西 我当时思考的角度是0和非0的辨别。要么这棵树没被处理过,是0;要么被处理过了,就是非0。因为我们写到越后面的一些判断题时,更多是运用0和非0的思想来解决问题的,所以我就这么写了。
喜欢吃东西的小东西 1年前 回复TA
把它初始的树设为1感觉更简单(点烟思考.jpg)