解题思路:
1.把这条道路上树的总数用一个数组装起来,把这个数组的每个元素都先定义为0;
2.确定地铁区域,用双循环,外循环确定有多少个铁路区域;内循环用来给铁路区域做处理,并让此区域中对应所有的数组元素加1。(我们不用管那些重叠的铁路区域,我们只需要知道非地铁区域对应的数组元素的数值一直都是0就行了,这点很重要。)
3.重头到尾开始统计整条道路树木的数量(整个数组的情况),用循环,定义t=0,一旦出现有元素等于0,我们就t=t+1。全部过一遍,我们就能知道有多少个等于0的元素了(也就是没被铁路区域盖住的树木数量)。
4.输出t,即剩余的树木。
注意事项:
1.由于数组arr的第最开始元素是arr【0】,所以从arr【0】到arr【z】一共有z+1个元素。
2.,同理,由于道路第0米也会有一颗树(如题所述),所以如果一条道路的长度为z,则这条道路一共有z+1棵树。
3.注意好循环中始末的数值!
参考代码:
#include
int main()
{
int j,i,q,s,z,t=0,n=0;
scanf("%d",&z); //道路的长度(有z+1棵树)
scanf("%d",&n); //输入n组地铁区域
int a[z]; //(有z+1个元素的数组)
for(i=0;i<=z;i++) //把所有数组元素赋值为0
{
a[i]=0;
}
for(i=1;i<=n;i++) //对地铁区域依次进行处理
{
scanf("%d%d",&q,&s); //每个地铁区域初,末位置
for(j=q;j<=s;j++)
{
a[j]+=1; //把区域里的数加上去,让它的数值不为0
}
}
for(i=0;i<=z;i++) //对整条道路进行统计
{
if(a[i]==0)
t++;
}
printf("%d",t);
return 0;
}
0.0分
4 人评分
H2330819074 2023-12-01 08:26:35 |
我当时思考的角度是0和非0的辨别。要么这棵树没被处理过,是0;要么被处理过了,就是非0。因为我们写到越后面的一些判断题时,更多是运用0和非0的思想来解决问题的,所以我就这么写了。
H2330819074 2023-12-01 08:30:35 |
把初始的树都设置为1,如果它因为铁路处理就把它变为0。后面再从头逐个统计没被处理的树,也就是为1的元素的数量。这个方法确实会比我的这个方法更简单些。