Manchester


私信TA

用户名:wenyajie

访问量:332269

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 65591
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:
定义一个数组;数组下标代表数轴上的每个整数点即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分

18 人评分

  评论区

赞赞赞
2023-04-02 23:42:23
#include<stdio.h>
int main()
{
	int L,m;
	int a[128][128];
	int b[L];
	scanf("%d%d",&L,&m);
	int i,j;
	for(i=0;i<m;i++)
	{
		scanf("%d%d",&a[i][0],&a[i][1]);

	} 
	for(i=0;i<m;i++)
	{
		for(j=a[i][0];j<=a[i][1];j++)
		{
			b[j]=1;
		 } 
	} 
	int count=0;
	for(i=0;i<=L;i++)
	{
		if(b[i]==1)
		count++;
	}
	printf("%d",L+1-count); 
    return 0;
}
2022-11-17 16:16:26
点赞!!
2021-08-08 19:40:50
#include <stdio.h>

int main()
{
	int L,M;
	scanf("%d%d",&L,&M);
	int n=L+1,sum=0;
	int buf[n];
	for(int i=0;i<n;i++)
		buf[i]=0;
	for(int i=0;i<M;i++)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		for(int i=a;i<=b;i++)
			buf[i]=1;	
	}
	for(int i=0;i<n;i++)
		if(buf[i]!=1) sum++;
	printf("%d\n",sum);
	return 0;
}
2020-02-09 11:28:38
#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:段错误,检查是否有数组越界,指针异常,访问到不应该访问的内存区域
2020-01-31 10:54:05
哈哈哈和我思路一样呢~~~开心~
2019-10-02 00:38:58
Thumbs up ,思路很好,一下子就简化了代码
2019-08-30 21:40:27
#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;
}
我的思路直接不考虑重跌的部分,有多少砍多少
2019-03-04 14:50:35