B2151 正常血压

· · 题解

欢迎报名洛谷网校,期待和大家一起进步!

本题考察循环结构、分支嵌套。

本题的关键在于连续正常的最长小时数。为此,我们需要准备两个计数变量。一个是 cur,用来记录当前这一段连续正常的血压持续了多少个小时。另一个是 max_h,用来记录我们到目前为止发现的最长的连续正常时间。

我们一个小时一个小时地来观察血压。对于每一次测量结果,我们需要判断这次血压是否正常。如果这次血压是正常的,我们就将 cur 的值加 1。如果这次血压是不正常的,相当于打断了“连续正常”。这时候,我们要看看刚刚结束的那一段连续正常的时间 cur 是不是比我们之前记录的 max_h 还要长(使用“打擂台法”更新 max_h),并且将 cur 清零。

这样做有一个例外情况:如果血压到最后一次测量结束一直是维持正常的,那么 max_h 没有被更新过。所以,在所有循环都结束后,我们还需要再比较一次当前的 curmax_h,看看 cur 是不是比 max_h 大,如果是,就再更新一次 max_h

参考代码:

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;