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 // 正整数
✓
里程碑达成:
下一节用单分支算邮资,用双分支判断买文具够不够钱。