C语言编程一棵树思路,校门外的树 (C++详细代码)思路清晰,容易懂;

这篇博客讲解了如何解决一个编程问题,即在马路长度为L且有M个地铁区域的情况下,计算移除地铁区域后马路上剩余树的数量。通过遍历区域边界并标记树位置,最后输出剩余树的数目。

###[1099:校门外的树](https://www.dotcpp.com/oj/problem1099.html "1099:校门外的树")

####题目描述

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

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

#### 输入

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

#### 输出

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

####解题思路

##### 思路:

声名一个数组标记建地铁的区域,

当a[i]==1时 该坐标为建地铁的区域;

当a[i]==0时 该坐标为的树区域;

###### `int a[10002]={}`用于标记建地铁的区域

```

int a[10002]={},x = 0,y = 0;

for(int i = 1;i <= m;i++){

cin >> x >> y; //分别表示一个地铁区域的起始点和终止点的坐标。

for(int j = x;j <= y;j++){

a[j] = 1; //标记建地铁的区域

}

}

```

如果该坐标为建地铁的区域(`a[i]==1`)那么树的数目减一(`--l1`).

`int l1=l`用于保存`l`的值,并算出马路上剩余的树的数目。

```

int l1 = l;

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

if(a[i] == 1){

--l1;

}

}

```

#### 完整的代码

```

#includeusing namespace std;

int main ()

{

int l = 0,m = 0;

cin >> l>> m;

int a[10002] = {},x = 0,y = 0;

for(int i = 1;i <= m;i++){

cin >> x >> y;

for(int j = x;j <= y;j++){

a[j] = 1;

}

}

int l1 = l;

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

if(a[i] == 1){

--l1;

}

}

cout << ++l1;

return 0;

}```

###### 严禁转载和复制代码

###### 作者:➹Q

###### 如有疑问请在评论区里回复!!谢谢

2020-03-26 21:55:50 星期四

0.0分

1 人评分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值