原题链接:校门外的树
解题思路:
定义一个数组;数组下标代表数轴上的每个整数点即0,1,2,……,n(长度为500的公路有501颗树);
把这个数组初始化全为1(为1代表有树,0代表被移除);
输入移除区域(x,y),把这个区域上的树全置0;(有多个,用循环控制);
输出为1的树的数目;
注意事项:
数轴上的0点也有数;
参考代码:
//C++
#include <iostream>
using namespace std;
int main()
{
int L,M,x,y,a[10001];
cin>>L>>M;
for(int i=0;i<=L; i++) //先将数组全赋值为1
a[i]=1;
for(int i=0; i<M; i++)
{
cin>>x>>y; //[x,y]为区域区间
for(int j=x; j<=y; j++) //将区域区间内的值赋为0
a[j]=0;
}
int sum=0;
for(int i=0; i<=L; i++)
{
if(a[i]==1) //如果数组元素值是1 则计数加1
sum++;
}
cout<<sum;
return 0;
}//C
#include <stdio.h>
//初始化数组值为1
void InitArray(int *a,int num)
{
for(int i=0; i<=num; i++)
{
a[i]=1;
}
}
//将要移除的区域(x,y)置为0
void InitZero(int *a,int x,int y)
{
for(int i=x; i<=y; i++)
{
a[i]=0;
}
}
//输出值为1的即为结果
void Result(int *a,int L)
{
int sum=0;
for(int i=0; i<=L; i++)
{
if(a[i]==1)
sum++;
}
printf("%d",sum);
}
int main()
{
int a[10001]; //题意L<=10000
int L,M,x,y;
while(scanf("%d%d",&L,&M))
{
InitArray(a,L);
for(int i=0; i<M; i++)
{
scanf("%d%d",&x,&y);
InitZero(a,x,y);
}
Result(a,L);
}
return 0;
}0.0分
20 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复