c语言数组,校门外的树

img

img

img


我代码没打完,找到重复区域加树相加,会有重复的,不知道怎么解决

#include<stdio.h>
 
int main()
{
    int l,j,m,a[10005],c=0,i,u,v;
    for(i=0;i<=10000;i++)
    a[i]=1;//先给所有位置都赋值1,表示有树;反正元素从0~10000,用时再取l 
    scanf("%d%d",&l,&m);
    for(i=1;i<=m;i++)
    {
    scanf("%d %d",&u,&v);
    for(j=u;j<=v;j++)
        a[j]=0;//将u到v之间的元素赋值为0,表示没树了 
    }
    for(i=0;i<=l;i++)
    {
        if(a[i]==1)
        c++;//统计0~l之间1的个数 
    }
    printf("%d\n",c);
    return 0;
}
 
​如有帮助,望采纳

直接定义一个10000元素的数组,用0、1表示是否有树。
这里0表示有树,1表示没有
每次输入起点和终点就去对对应的数组元素赋值。
最后循环数组,为0的时候计数值加一


#include <stdio.h>

int main(void) {
    int arr[10000] = {0};
    int wayLength = 0, areaNum = 0;
    int beginPoint = 0, endPoint = 0;
    int treeSum = 0;
    scanf("%d%d", &wayLength, &areaNum);
    for (int i = 0; i < areaNum; ++i) {
        scanf("%d%d", &beginPoint, &endPoint);
        for (int j = beginPoint; j <= endPoint; ++j) {
            arr[j] = 1;
        }
    }
    for (int i = 0; i < wayLength + 1; ++i) {
        if (arr[i] == 0)
            ++treeSum;
    }
    printf("%d", treeSum);
    return 0;
}