广药番茄在哪呢


私信TA

用户名:qingshuidoufu

访问量:8571

签 名:

qingshuidoufu

等  级
排  名 5243
经  验 1571
参赛次数 0
文章发表 18
年  龄 0
在职情况 学生
学  校 广东药科大学
专  业

  自我简介:

解题思路:
        建立一个数组来保存数轴上的树的状态,另一个二维数组来保存每次输入的区域,在输入输入的区域的同时,改变信号值的状态,最终遍历数组来统计所有的未改变的值的个数.
注意事项:

        数组的定义要比L值多一个,因为0也为有效值.

参考代码:



/* 题目描述


某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。


由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。



输入


输入的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。



输出


输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。



样例输入

500 3

150 300

100 200

470 471

样例输出

298 */

#include<stdio.h>

int main(){

int l,m,count=0;

int i,j;

scanf ("%d",&l);

scanf ("%d",&m);

int a[l+1],b[m][2];  //定义一个长度为l+1(包括0坐标)的数组来表示坐标轴,和一个m行2列的二维数组来存储没一个区域的起始结束位置.

for(i=0;i<=l;i++){

a[i]=1;      //每一个数组元素中存有这棵树的状态,初始都存在,用1来表示

}

for (i=0;i<m;i++){

scanf ("%d",&b[m][0]);

scanf ("%d",&b[m][1]);

for (j=b[m][0];j<=b[m][1];j++){

a[j]=0;              //读入一块区域的同时给这块区域砍树,被砍了的坐标变为0;

}                        //用状态值来表示避免了计算重复区域的麻烦,已赋值0的还是赋值0

}

for(i=0;i<=l;i++){

if (a[i]==1){

count++;     //统计没被砍的树(值为1)

}

}

printf ("%d",count);

return 0;

}


 

0.0分

0 人评分

  评论区

  • «
  • »