#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;
}