原题链接:校门外的树
解题思路:
定义一个数组;数组下标代表数轴上的每个整数点即0,1,2,……,n(长度为500的公路有501颗树);
把这个数组初始化全为1(为1代表有树,0代表被移除);
输入移除区域(x,y),把这个区域上的树全置0;(有多个,用循环控制);
输出为1的树的数目;
注意事项:
数轴上的0点也有数;
参考代码:
#include<stdio.h>
void chushihua(int *a,int n);
void yichu(int *a,int x,int y);
void output(int *a,int n);
void function();
/*--------------------------------------------------*/
int main()
{
function();
return 0;
}
/*--------------------------------------------------*/
void function()
{
int n,h;
int x,y;
int a[10001];
while(scanf("%d%d",&n,&h)!=EOF)
{
chushihua(a,n);
for(int i=0;i<h;i++)
{scanf("%d%d",&x,&y);yichu(a,x,y);}
output(a,n);
}
return ;
}
/*--------------------------------------------------*/
void chushihua(int *a,int n)
{
for(int i=0;i<=n;i++)
a[i]=1;
return ;
}
/*--------------------------------------------------*/
void yichu(int *a,int x,int y)
{
for(int i=x;i<=y;i++)
a[i]=0;
return ;
}
/*--------------------------------------------------*/
void output(int *a,int n)
{
int sum=0;
for(int i=0;i<=n;i++)
{if(a[i]==1)sum++;}
printf("%d\n",sum);
return ;
}0.0分
10 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include <stdio.h> int main() { int L,M,a,b,c; c=0; scanf("%d %d",&L,&M); if(M>100&&M<1&&L<1&&L>1000) return -1; int e[1000]; for(int r=0;r<1000;r++) e[r]=0; for(int t=0;t<M;t++) {scanf("%d %d",&a,&b); for(int k=a;k<=b;k++) e[k]=1; } for(int d=0;d<1000;d++) if(e[d]==1) c++; printf("%d",L+1-c); return 0; } 为什么总是报这种错,VC6.0都能通过,求大佬解答Segmentation fault:段错误,检查是否有数组越界,指针异常,访问到不应该访问的内存区域#include<stdio.h> int main(){ int L,i,s,n1,n2,len=0; int a[10000]; scanf("%d %d",&L,&s); for(i=0;i<=L;i++){ a[i]=1; } int k=0; while(k<s){ scanf("%d %d",&n1,&n2); for(i=n1;i<=n2;i++){ a[i]=0; } k++; } for(i=0;i<=L;i++){ if(a[i]==1){ len++; } } printf("%d",len); return 0; } 我的思路直接不考虑重跌的部分,有多少砍多少//gcc可以成功,提交时输出超限了,请教大佬帮忙分析一下原因。 #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; }