解题思路:
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分
6 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复