当前位置: 首页 > news >正文

老题新解|正常血压

《信息学奥赛一本通》第150题:正常血压

题目描述
监护室每小时测量一次病人的血压,若收缩压在 90∼14090\sim 14090140 之间并且舒张压在 60∼9060\sim 906090 之间(包含端点值)则称之为正常,现给出某病人若干次测量的血压值,计算病人保持正常血压的最长小时数。
输入格式
第一行为一个正整数 n(n<100)n(n<100)n(n<100),其后有 nnn 行,每行 222 个正整数,分别为一次测量的收缩压和舒张压。
输出格式
输出仅一行,血压连续正常的最长小时数。
输入输出样例 #1
输入 #1
4
100 80
90 50
120 60
140 90
输出 #1
2

大家好,我是莫小特。
这篇文章给大家带来《信息学奥赛一本通》中的第 150 题:正常血压。

image.png

一、题目描述

洛谷的题号是:B2151 正常血压

image.png

二、题意分析

这道题是信息学奥赛一本通练习题的第 150 题。

根据输入格式的描述,输入第一行为一个正整数 n,n 小于 100,其后有 n 行,每行有两个正整数,分别是测量的收缩压和舒张压,此处需要使用 for 循环实现,从 1 遍历到 n,分别输入两个值。

int n;
cin>>n;
for(int i=1;i<=n;i++)
{}

根据题目要求,需要计算病人保持正常血压的最长小时数,所以需要使用 int 类型来记录这两个血压的数据。

int a,b;
for(int i=1;i<=n;i++)
{cin>>a>>b;	
}

因为要记录最长连续的血压,所以需要新建一个变量来存储这个连续的数据,初始值为 0。

int cnt=0;

正常血压值,收缩压在:90140,舒张压在:6090,并且包括端点值,所以对 a 和 b 进行判断。

if(a>=90&&a<=140&&b>=60&&b<=90)//血压正常
{}

血压正常则进行累加,即进行 ++ 处理。

if(a>=90&&a<=140&&b>=60&&b<=90)//血压正常
{cnt++;
}

其他情况则是不正常,将 cnt 置为 0。

else
{cnt=0;
}

但由于要求最长连续时间,所以需要定义一个最长小时数的标准,也就是最大值,如果大于最大值的时候,更新最长小时数。

int maxx=-1;

在分支语句中进行比较,如果大于最大值,则更新最大值。

if(cnt>maxx)
{maxx=cnt;
}

最终输出最大值即可。

cout<<maxx;

按照样例输入对数据进行验证。

image.png

只输出了 1,分析一下代码,发现是在最后的时候,并没有做比较,所以我们还需要在最后一次比较。

举个例子:

3
100 80
120 70
130 80

每次都正常:

  • 第 1 次:cnt = 1
  • 第 2 次:cnt = 2
  • 第 3 次:cnt = 3

循环结束,cnt=3,但因为最后没触发 elsemaxx 还是初始值 0,结果错误。

所以如果最后一条或最后几条数据是正常的,循环会一直执行 cnt++,但循环结束后没有再进入 else,于是 maxx 没有机会更新。

所以我们需要在循环结束后,再比较一次。

if (cnt>maxx)
{maxx=cnt;
}

再测试一下即可。

image.png

符合样例输出,到网站提交测评。

image.png

测试通过!

三、完整代码

该题的完整代码如下:

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{int n;int a,b;cin>>n; int cnt=0;int maxx=-1;for(int i=1;i<=n;i++){cin>>a>>b;if(a>=90&&a<=140&&b>=60&&b<=90)//血压正常{cnt++;}else{if(cnt>maxx){maxx=cnt;}cnt=0;}}if (cnt>maxx){maxx=cnt;}cout<<maxx;return 0;
}

四、总结

本题考察了循环控制与区间判断,主要涵盖以下知识点:

1、区间判断

判断一个值是否落在某个区间 [L, R],用 x>=L && x<=R

本题中收缩压范围 [90, 140],舒张压范围 [60, 90]

2、连续统计

需要维护一个临时计数器 cnt 表示当前连续正常的小时数。

需要维护一个最大值 maxx,在 cnt 更新时判断是否刷新最大值。

3、循环结束后的处理

如果最后一次输入仍然是正常血压,循环结束后 maxx 可能没有被更新,因此需要在循环结束后再判断一次。

常见易错点与解题建议:

1、忘记最后一次比较

容易只在异常时更新 maxx,导致当末尾都是正常血压时结果错误。

👉 建议:循环结束后补一次 if(cnt>maxx) maxx=cnt;

2、初始值设置错误

有些同学把 maxx 初始化为 0,但如果所有血压都异常,会导致输出错误结果。

👉 建议:初始化为 -1 或者直接用 0,但要确保逻辑覆盖“全不正常”的情况。

3、区间边界遗漏

容易把端点值写成 < 而不是 <=,导致 90140 等边界数据被判为不正常。

👉 建议:仔细阅读题目“包含端点值”,写成 >=<=

4、输入处理不完整

有些同学可能写成 while(cin>>a>>b),但题目格式明确有 n,容易导致逻辑混乱。

👉 建议:严格按照题目格式,先读 n,再循环 n 次。

---end---

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注我哦!
如果有更好的方法也可以在评论区评论哦,我都会看哒~

我们下集见~

http://www.dtcms.com/a/442598.html

相关文章:

  • WebRTC 入门与实战(一)之初级篇
  • 福州网站建设好的公司网站加入地图导航
  • directadmin备份网站wordpress用户名的要求
  • 网站设计文字大小wordpress类似于
  • 邹晓辉Z与其AI智能体A示范人机互助概要科普介绍:融智学三部曲
  • 中国高铁车型简记
  • Spring IOC , DI 和 应用分层
  • 现代化文件下载器
  • AI大模型微调教程6
  • Python函数返回多个值完全指南:从基础到高级实战
  • 好的手表网站wordpress 微信 主题制作
  • 「机器学习笔记2」机器学习系统设计:从理论到实践
  • 北京网站建设公司华网制作移动端网站价格
  • RSS 阅读器:信息时代的便捷助手
  • memcpy 简单实现
  • com2com一个将远端串口数据转发到本地的工具
  • 【人工智能通识专栏】第三十五讲:工作流(Workflow)
  • 怎么制作网站教程视频网站建设情况
  • 裕顺网站建设贵州住房城乡建设厅网站
  • Agent
  • 第十章 混合
  • Linux 网络和流量加密完整指南(第 1 部分)
  • 宁波网站推广优化外包公司wordpress调用标签云
  • 360怎么做网站要看网站是多少
  • 北京专业网络直播制作seo与sem的区别和联系
  • 乌市正规网站建设云主机服务器
  • API查询性能优化方案
  • 从《标准日本语》初中级到日语进阶:你的水平定位与“开挂”学习指南
  • 济南专业做网站公司备案做电影网站吗
  • 做一套二级域名网站怎么做交换友情链接是什么意思