B2151 正常血压
欢迎报名洛谷网校,期待和大家一起进步!
本题考察循环结构、分支嵌套。
本题的关键在于连续正常的最长小时数。为此,我们需要准备两个计数变量。一个是 cur,用来记录当前这一段连续正常的血压持续了多少个小时。另一个是 max_h,用来记录我们到目前为止发现的最长的连续正常时间。
我们一个小时一个小时地来观察血压。对于每一次测量结果,我们需要判断这次血压是否正常。如果这次血压是正常的,我们就将 cur 的值加 cur 是不是比我们之前记录的 max_h 还要长(使用“打擂台法”更新 max_h),并且将 cur 清零。
这样做有一个例外情况:如果血压到最后一次测量结束一直是维持正常的,那么 max_h 没有被更新过。所以,在所有循环都结束后,我们还需要再比较一次当前的 cur 和 max_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;