线段覆盖滴捏

题目描述:

给你 nn 条在数轴上的线段,每条线段的端点都是整数。线段可以相互交叉,重叠或甚至重合。每个线段的参数是左端点和右端点的坐标。

考虑坐标 11 和 mm 以及它们之间的坐标为整数的点。您的任务是打印所有没有被线段覆盖的点。一条线段会覆盖它的端点。

输入格式:

输入的第一行包含两个整数 nn 和 mm(1 \le n,m\le1≤n,m≤100)。

然后输入 nn 行,每一行包含两个整数 ll 和 rr,为线段的左右端点(1\le l\le r\le1≤l≤r≤m)(线段可以退化为一个点)。

输出案例:

2
3 4

思路:使用数组模拟每一个端点,用循环改变端点内数组的值,存在为一不存在为零

#include<cstdio>
#include<string.h>
int main()
{
	int n,m,b,c,count=0,first=1;
	int arr[100];
	memset(arr,0,sizeof(arr));
	scanf("%d%d",&n,&m);
	for(int a=0;a<n;a++)
	{
		scanf("%d%d",&b,&c);
		for(int d=b-1;d<c;d++)
		{
			arr[d]=1;
		}
	}
	for(int a=0;a<m;a++)
	{
		if(arr[a]!=1)
		{
			count++;
		}
	}	
	printf("%d\n",count);
	for(int a=0;a<m;a++)
	{
		if(!arr[a])
		{
			if(first) first=0;
			else printf(" ");
			printf("%d",a+1);
		}
	}	
	return 0;
}

其中最注意输出格式的限制,学到了对数组整体赋值的方法,使用string.h函数,再用memset函数(数组名,赋值量,sizeof(数组名));以及对于格式具体要求的格式进行的优化:前面int first=1,在后面的判断中进行if(first) first=0的后置语句,就可以将第一个不输出空格而其他全部输出空格。

但是最关键的都不是这些,本人使用的是devc++编译,我粗心地未将count赋值0,就使得我自测正确但是提交错误,希望下次能不犯同样的错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值