当前位置:网站首页>C语言数组题_校门外的树_标记法
C语言数组题_校门外的树_标记法
2022-08-09 10:48:00 【Cutecumber】
题目描述
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是11米。我们可以把马路看成一个数轴,马路的一端在数轴00的位置,另一端在LL的位置;数轴上的每个整数点,即0,1,2,…,L0,1,2,…,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
解题思路
刚一看题目,觉得这个数组的题重点考察重合部分的处理,以两个修建区域为例,无外乎三种情况1:两个不重合;2:两个重合(一个包含在另一个里);3:部分重合。起初以为单纯的把每种情况列出来相加再减去重合部分的树的数目就可以完成,但是这样非常复杂。
此题最佳的做法是用标记法,即先建立一个数组,令其所有元素为‘1’,将每一个建设区域内的值修改为‘0’,这样即使重合的部分也不用担心会多减去树。
代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int l,m,count=0,i,j;
int a[101][2],lu[10001]={
'\0'}; //a储存所有区域的始末位置; lu储存马路上的树的位置
scanf("%d %d",&l,&m);
for(i=0;i<l+1;i++)
lu[i]=1; //l为马路长度,每棵树距离1米,树的个数为l+1,这里将所有树的位置标记为‘1’
for(i=0;i<m;i++)
{
scanf("%d %d",&a[i][0],&a[i][1]); //对m个区域的始末位置赋值
}
for(i=0;i<m;i++)
{
for(j=a[i][0];j<=a[i][1];j++)
{
lu[j]=0; //将每个区域的所在路的区间的值覆盖为‘0’,表示此段路被用作建设
}
}
for(i=0;i<l+1;i++)
if(lu[i]==1)
count++; //遍历lu,记录'1'的个数,即未被占用的树的数目
printf("%d",count);
}
边栏推荐
猜你喜欢
OpenSSF的开源软件风险评估工具:Scorecards
Shell script combat (2nd edition) / People's Posts and Telecommunications Press Script 2 Validate input: letters and numbers only
ESIM(Enhanced Sequential Inference Model)- 模型详解
多商户商城系统功能拆解26讲-平台端分销设置
情感分析SowNLP词库
Oracle数据库常用函数总结
商业技术解决方案与高阶技术专题 - 数据可视化专题
Cpolar内网穿透的面板功能介绍
研发需求的验收标准应该怎么写? | 敏捷实践
在webgis中显示矢量化后的风险防控信息
随机推荐
10000以内素数表(代码块)
Official explanation, detailed explanation and example of torch.cat() function
numpy的ndarray取数操作
深度学习--自编码器(AutoEncoder)
cnn的输入输出
BERT预训练模型(Bidirectional Encoder Representations from Transformers)-原理详解
使用cpolar远程连接群晖NAS(创建临时链接)
笔记本电脑使用常见问题,持续更新
faster-rcnn中的RPN原理
信息系统项目的十大管理
备战金三银四:如何成功拿到阿里offer(经历+面试题+如何准备)
The common problems in laptops, continuously updated
MNIST机器学习入门
乘积量化(PQ)
activemq 消息持久化
unix环境编程 第十四章 14.4 I/O多路转接
unix环境编程 第十五章 15.6 XSI IPC
Unix System Programming Chapter 15 15.2 Pipes
彻底理解工厂模式
1004 成绩排名 (20 分)