题目描述
某校大门外长度为 l 的马路上有一排树,每两棵相邻的树之间的间隔都是 1 米。我们可以把马路看成一个数轴,马路的一端在数轴 0 的位置,另一端在 l 的位置;数轴上的每个整数点,即 0,1,2,3,4,5,6,…,l,都种有一棵树。
上AC的代码:
#include <iostream>
using namespace std;
int main()
{
int l,m,x,y,add=0;
int a[10000]={0}; //将数组内的值全部初始化为0,便于计算,可以引入new,实现动态地定义数组大小
cin >> l;
for (int i = 0; i <= l; i++)
{
a[i]=1; //a[i]=1表示每个符合要求的地方都有一棵树
}
cin >> m;
for (int i = 0; i < m; i++)
{
cin >> x >> y;
for (int i = x; i <= y; i++) //由题目描述可知,在终端l的地方仍种有一棵树,因此i<=l,才是符合题目要求的
{
a[i]=-1; //此处表示,需要修建地铁的地方把树挖掉了,不需要考虑区域是否会重合,完全不影响
}
}
for (int i = 0; i <= l; i++) //由题目描述可知,在终端l的地方仍种有一棵树,因此i<=l,才是符合题目要求的
{
if (a[i]!=-1)
{
add += 1; //将数组a内所有1相加,得到还剩余树的数量
}
}
cout << add;
return 0;
}
最后
欢迎大佬交流、指正,我是小萌新