专栏文章

B2151 正常血压

B2151题解参与者 8已保存评论 7

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
7 条
当前快照
1 份
快照标识符
@mipazx5p
此快照首次捕获于
2025/12/03 09:03
3 个月前
此快照最后确认于
2025/12/03 09:03
3 个月前
查看原文
欢迎报名洛谷网校,期待和大家一起进步!
本题考察循环结构、分支嵌套。
本题的关键在于连续正常的最长小时数。为此,我们需要准备两个计数变量。一个是 cur,用来记录当前这一段连续正常的血压持续了多少个小时。另一个是 max_h,用来记录我们到目前为止发现的最长的连续正常时间。
我们一个小时一个小时地来观察血压。对于每一次测量结果,我们需要判断这次血压是否正常。如果这次血压是正常的,我们就将 cur 的值加 11。如果这次血压是不正常的,相当于打断了“连续正常”。这时候,我们要看看刚刚结束的那一段连续正常的时间 cur 是不是比我们之前记录的 max_h 还要长(使用“打擂台法”更新 max_h),并且将 cur 清零。
这样做有一个例外情况:如果血压到最后一次测量结束一直是维持正常的,那么 max_h 没有被更新过。所以,在所有循环都结束后,我们还需要再比较一次当前的 curmax_h,看看 cur 是不是比 max_h 大,如果是,就再更新一次 max_h
参考代码:
CPP
for (int i = 0; i < n; ++i) { // 循环 n 次,代表 n 个小时的测量
    int a, b;
    cin >> a >> b;
    if (a >= 90 && a <= 140 && b >= 60 && b <= 90) {
        // 如果血压正常
        cur++; // 当前连续正常的小时数加 1
    } else {
        // 如果血压不正常,则“打擂台”更新 max_h。
        if (cur > max_h)
            max_h = cur;
        cur = 0;
    }
}
// 解决例外情况
if (cur > max_h)
    max_h = cur;

评论

7 条评论,欢迎与作者交流。

正在加载评论...