测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看
B37

摆擂台求最高分与向上取整

引入

章前总览 求一组数的最大/最小值,常用“摆擂台”:先假定第一个是冠军,再逐个挑战更新。另外,邮资等题要用到整数向上取整公式 (c+d-1)/d

本节要点:

  • 案例:4 个分数求最高分
  • 多个独立单分支 if,不要乱并成 else
  • 整数向上取整:(c+d−1)/d

1 案例:求 4 个分数的最高分

输入 4 个正整数分数 a b c d(均 ≤100),输出最高分。样例:90 88 98 95 → 98。

摆擂台

  • 定义 mx,初值为第一个数。
  • 后面每个数若比 mx 大,就更新 mx
  • 最后 mx 就是最大值。求最小值同理,改成“更小才更新”。

</> 参考代码

#include <iostream>
using namespace std;

int main() {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    int mx = a;          // 先假定第一个最高
    if (b > mx) mx = b;  // 三个独立的单分支
    if (c > mx) mx = c;
    if (d > mx) mx = d;
    cout << mx << endl;
    return 0;
}
  • 这三个 if 相互独立,不能合并成 if…else…
  • 流程图能帮助理解,但不必每题都画。

2 向上取整与向下取整

对小数截取整数部分叫取整。3.14 向上取整 → 4,向下取整 → 3。

整数除法的简便写法

  • 向下取整:两个整数 c/d 本身就是向下取整(正数时)。
  • 向上取整:(c + d - 1) / d(整数除法)。
  • 例:17/5 数学上 3.4 → 向上 4,而 (17+5-1)/5 = 4;15/5=3,(15+5-1)/5 = 3

易错

  • 不要简单写 c/d+1:当 c 刚好是 d 的倍数时会多加 1。
  • 浮点数的向上取整更麻烦;一级邮资题用整数公式即可。
小结

两件武器:

mx = a; if (x>mx) mx=x;   // 摆擂台
向上取整 = (c+d-1)/d     // 正整数
里程碑达成:

下一节用单分支算邮资,用双分支判断买文具够不够钱。