2.2 校门外的树
Note:
C++不能用变量定义数组长度,应通过指针来动态申请空间,实现动数组长度的变量赋值。
eg:int *A = new int[i];(i为变量)
问题描述:
某校门外长度为L的马路上有一排树,每两颗相邻的树之间的间隔都是1m。可以把马路看成一个数轴,马路的一端在数轴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<cstdio>
#include<stdlib.h>
#include<iostream>
using namespace std;
int main()
{
int L, M, i, j, sum=0;
cin >> L >> M;
int *Tree;
Tree = new int[L];
for(i = 0; i <= L; i++)//马路长L 树木初始化
Tree[i] = 1;
for(i = 0; i < M; i++)//区域数目为M
{
int a, b;
cin >> a >> b;
if(a<0||a>L||b<0||b>L)
{
cout <<"error";
exit(0);
}
for(j = a; j <= b; j++)
Tree[j] = 0;
}
for(i = 0; i <= L; i++)
{
if(Tree[i] == 1)
++sum;
}
cout << sum;
system("pause");
return 0;
}